Need help with jsdom-global?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

rstacruz
428 Stars 36 Forks 60 Commits 29 Opened issues

Description

Enable DOM in Node.js

Services available

!
?

Need anything else?

Contributors list

# 1,979
ESLint
Sass
test-fr...
phantom...
48 commits
# 510,365
JavaScr...
mocha
2 commits
# 355,150
TypeScr...
HTML
reactjs
cropper
1 commit
# 2,374
React
JavaScr...
cypress
mocking...
1 commit

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.