Skip to content

Commit

Permalink
Close #585 PR: Added recipe for writing test with code depending on a…
Browse files Browse the repository at this point in the history
… window object.
  • Loading branch information
0xjocke authored and sindresorhus committed Mar 2, 2016
1 parent 752ddd3 commit 2f10448
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
71 changes: 71 additions & 0 deletions docs/recipes/browser-testing.md
@@ -0,0 +1,71 @@
# Setting up AVA for browser testing

AVA does not support running tests in browsers [yet](https://github.com/sindresorhus/ava/issues/24). Some libraries require browser specific globals (`window`, `document`, `navigator`, etc).
An example of this is React, at least if you want to use ReactDOM.render and simulate events with ReactTestUtils.

This recipe works for any library that needs a mocked browser environment.

## Install jsdom

Install [jsdom](https://github.com/tmpvar/jsdom).

> A JavaScript implementation of the WHATWG DOM and HTML standards, for use with node.js
```
$ npm install --save-dev jsdom
```

## Setup jsdom

Create a helper file and place it in the `test/helpers` folder. This ensures AVA does not treat it as a test.

`test/helpers/setup-browser-env.js`:

```js
global.document = require('jsdom').jsdom('<body></body>');
global.window = document.defaultView;
global.navigator = window.navigator;
```

## Configure tests to use jsdom

Configure AVA to `require` the helper before every test file.

`package.json`:

```json
{
"ava": {
"require": [
"./test/helpers/setup-browser-env.js"
]
}
}
```

## Enjoy!

Write your tests and enjoy a mocked window object.

`test/my.react.test.js`:

```js
import test from 'ava';
import React from 'react';
import {render} from 'react-dom';
import {Simulate} from 'react-addons-test-utils';
import sinon from 'sinon';
import CustomInput from './components/custom-input.jsx';

test('Input calls onBlur', t => {
const onUserBlur = sinon.spy();
const input = render(
React.createElement(CustomInput, {onUserBlur),
div
)

Simulate.blur(input);

t.true(onUserBlur.calledOnce);
});
```
1 change: 1 addition & 0 deletions readme.md
Expand Up @@ -698,6 +698,7 @@ AVA, not Ava or ava. Pronounced [`/ˈeɪvə/` ay-və](media/pronunciation.m4a?ra
- [Code coverage](docs/recipes/code-coverage.md)
- [Endpoint testing](docs/recipes/endpoint-testing.md)
- [When to use `t.plan()`](docs/recipes/when-to-use-plan.md)
- [Browser testing](docs/recipes/browser-testing.md)


## Support
Expand Down

0 comments on commit 2f10448

Please sign in to comment.