Translations: Français, Русский, 简体中文
AVA does not support running tests in browsers yet. 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.
A JavaScript implementation of the WHATWG DOM and HTML standards, for use with node.js
$ npm install --save-dev 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
:
global.document = require('jsdom').jsdom('<body></body>');
global.window = document.defaultView;
global.navigator = window.navigator;
Configure AVA to require
the helper before every test file.
package.json
:
{
"ava": {
"require": [
"./test/helpers/setup-browser-env.js"
]
}
}
Write your tests and enjoy a mocked window object.
test/my.react.test.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);
});