Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rstacruz/jsdom-global
Enable DOM in Node.js
https://github.com/rstacruz/jsdom-global
dom jsdom mocha tape
Last synced: 1 day ago
JSON representation
Enable DOM in Node.js
- Host: GitHub
- URL: https://github.com/rstacruz/jsdom-global
- Owner: rstacruz
- Created: 2016-01-11T03:05:41.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2020-06-19T23:07:53.000Z (over 4 years ago)
- Last Synced: 2025-01-27T12:12:33.563Z (6 days ago)
- Topics: dom, jsdom, mocha, tape
- Language: JavaScript
- Size: 38.1 KB
- Stars: 477
- Watchers: 7
- Forks: 38
- Open Issues: 31
-
Metadata Files:
- Readme: README.md
- Changelog: HISTORY.md
Awesome Lists containing this project
README
# 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](https://travis-ci.org/rstacruz/jsdom-global.svg?branch=master)](https://travis-ci.org/rstacruz/jsdom-global "See test builds")
## Install
Requires [jsdom][].
```
npm install --save-dev --save-exact jsdom jsdom-global
```[jsdom]: https://github.com/tmpvar/jsdom
## 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.
```js
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.
```js
var cleanup = require('jsdom-global')()// do things
cleanup()
```## Tape
In [tape][], run it before your other tests.
```js
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.
```js
before(function () {
this.jsdom = require('jsdom-global')()
})after(function () {
this.jsdom()
})
```[tape]: https://github.com/substack/tape
[mocha]: https://mochajs.org/
[jsdom.jsdom()]: https://github.com/tmpvar/jsdom/#for-the-hardcore-jsdomjsdom## 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.
```js
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.
[zuul]: https://www.npmjs.com/package/zuul
[tape-run]: https://www.npmjs.com/package/tape-run
[budo]: https://github.com/mattdesl/budo
[hihat]: https://www.npmjs.com/package/hihat
[smokestack]: https://www.npmjs.com/package/smokestack* Writing your tests (`test.js`):
```js
require('jsdom-global')()// ...do your tests here
```* Running it with [smokestack]:
```sh
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]):
```sh
browserify test.js -t babelify | smokestack # run in a browser (with babel)
babel-node test.js # or the console
```[Browserify]: http://browserify.org/
[babel-cli]: https://babeljs.io/docs/usage/cli/
[babelify]: https://github.com/babel/babelify## Thanks
**jsdom-global** © 2016+, Rico Sta. Cruz. Released under the [MIT] License.
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).> [ricostacruz.com](http://ricostacruz.com) ·
> GitHub [@rstacruz](https://github.com/rstacruz) ·
> Twitter [@rstacruz](https://twitter.com/rstacruz)[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/jsdom-global/contributors