jsdom-global v3.0.2
jsdom-global
Enables DOM in Node.js
jsdom-global will inject document, window and other DOM API into your Node.js environment. Useful for running, in Node.js, tests that are made for browsers.
Install
Requires jsdom.
npm install --save-dev --save-exact jsdom jsdom-globalNote
jsdom-global now requires jsdom v10 or above. If you need jsdom v9 and below, use the previous version (jsdom-global@2).
Usage
Just invoke it to turn your Node.js environment into a DOM environment.
require('jsdom-global')()
// you can now use the DOM
document.body.innerHTML = 'hello'You may also pass parameters to jsdomGlobal() like so: require('jsdom-global')(html, options).
Check the jsdom.jsdom() documentation for valid values for the options parameter.
To clean up after itself, just invoke the function it returns.
var cleanup = require('jsdom-global')()
// do things
cleanup()Tape
In tape, run it before your other tests.
require('jsdom-global')()
test('your tests', (t) => {
/* and so on... */
})Mocha
Simple: Use Mocha's --require option. Add this to the test/mocha.opts file (create it if it doesn't exist)
-r jsdom-global/registerAdvanced: For finer control, you can instead add it via mocha's before and after hooks.
before(function () {
this.jsdom = require('jsdom-global')()
})
after(function () {
this.jsdom()
})ES2015
If you prefer to use import rather than require, you might want to use jsdom-global/register instead. Place it on top of your other import calls.
import 'jsdom-global/register'
import React from 'react'
import jQuery from 'jquery'
// ...Browserify
If you use Browserify on your tests (eg: smokestack, tape-run, budo, hihat, zuul, and so on), doing require('jsdom-global')() is a noop. In practice, this means you can use jsdom-global even if your tests are powered by browserify, and your test will now work in both the browser and Node.
Writing your tests (
test.js):require('jsdom-global')() // ...do your tests hereRunning it with smokestack:
browserify test.js | smokestack # run in a browser node test.js # or the console browserify test.js --no-bundle-external # also works (but why bother?)Running it with Babel (babelify or babel-cli):
browserify test.js -t babelify | smokestack # run in a browser (with babel) babel-node test.js # or the console
Thanks
jsdom-global © 2016+, Rico Sta. Cruz. Released under the MIT License. Authored and maintained by Rico Sta. Cruz with help from contributors (list).
ricostacruz.com · GitHub @rstacruz · Twitter @rstacruz