Skip to content

rstacruz/jsdom-global

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Status

Install

Requires jsdom.

npm install --save-dev --save-exact jsdom jsdom-global 

Note

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/register 

Advanced: 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 here
  • Running 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

About

Enable DOM in Node.js

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •