jsdom-global

by rstacruz

rstacruz /jsdom-global

Enable DOM in Node.js

418 Stars 37 Forks Last release: Not found 60 Commits 15 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

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 (

[email protected]
).

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

  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?)
  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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.