AVA is running in a Node.js environment. JavaScript that runs in a browser will likely expect the browser DOM globals to be in place.
With help from a package called jsdom,
you can write unit tests with ava
also for JavaScript that will run in a browser
and relying on browser specific globals such as window
, document
and navigator
.
npm install --save-dev jsdom
Use jsdom
to set the globals and the DOM elements that the test target is expecting.
The JavaScript code to be tested is doing a DOM query, such as: document.querySelector('#my-element-id')
.
To make the code testable with ava
, add the element to jsdom
and set the global object.
import test from 'ava';
import { JSDOM } from 'jsdom';
test.before(() => {
const dom = new JSDOM('<div id="my-element-id" />'); // insert any html needed for the unit test suite here
global.document = dom.window.document; // add the globals needed for the unit tests in this suite.
});
test('this is an example', (t) => {
const res = myTarget.runFunctionThatExpectsTheDocumentGlobalAndElement();
t.truthy(res);
});
In general, adding globals to the Node.js
environment is recommended against by jsdom
.
Please read through the linked wiki page and make sure you understand why.