Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
mocha-jsdom
Advanced tools
Deprecation notice: Consider jsdom-global instead, a simpler alternative that also works outside of Mocha.
mocha-jsdom
still works, butjsdom-global
is better supported.
Test frontend libraries in the console using Node.js, mocha and jsdom.
$ npm i --save-dev mocha-jsdom
Use jsdom()
inside your describe(...)
block (or the global context). It will
turn your Node.js environment into a mock browser environment supporting the
full DOM and browser API. The variables window
, document
, history
(and so
on) will then be available for use.
var jsdom = require('mocha-jsdom')
var expect = require('chai').expect
describe('mocha tests', function () {
jsdom()
it('has document', function () {
var div = document.createElement('div')
expect(div.nodeName).eql('DIV')
})
})
See examples/basic for an example of a basic setup.
If you are coming from mocha-jsdom v1.x, remove jsdom
if you're not using it before upgrading. jsdom
is now a direct dependency of mocha-jsdom
.
# using Yarn
yarn remove jsdom
yarn upgrade mocha-jsdom
# using npm
npm uninstall -S -D jsdom
npm upgrade mocha-jsdom
As of jsdom 4.0.0, jsdom now requires io.js and will not work with Node.js 0.12 or below.
mocha-jsdom is a simple glue to integrate jsdom to mocha.
Invoking jsdom()
will inject before
and after
handlers to the current
mocha suite which will setup and teardown jsdom. Here's what it does:
Window: global.window
will be available as the jsdom.
Globals: global variables like document
and history
are propagated,
and they're cleaned up after tests run.
Error handling: jsdom errors are sanitized so that their stack traces are shortened.
NB: Before you try this library, learn about jsdom first. In fact, you may be able to integrate jsdom into your tests without this library; this is mostly syntactic sugar and reasonable defaults.
Perfect for testing small DOM-consuming utilities in the console. See test/jquery.js for an example.
describe('mocha tests', function () {
var $
jsdom()
before(function () {
$ = require('jquery')
})
it('works', function () {
document.body.innerHTML = '<div>hola</div>'
expect($("div").html()).eql('hola')
})
})
See examples/basic for an example of a basic setup.
You can also pass the source code via src
:
describe('mocha tests', function () {
jsdom({
src: fs.readFileSync('jquery.js', 'utf-8')
})
...
})
You can pass jsdom options:
describe('mocha tests', function () {
jsdom({
parsingMode: 'xml'
})
...
})
When using with --watch
, you my encounter strange errors from 3rd-party
libraries like jQuery not working properly.
In these cases, use require('mocha-jsdom').rerequire
instead of require()
.
This will ensure that the require()
call will always happen.
var $
var jsdom = require('mocha-jsdom')
var rerequire = jsdom.rerequire
jsdom()
before(function () {
$ = rerequire('jquery')
})
Other mocha-jsdom specific options:
globalize
- propagates to values in window
to global
. defaults to true.
console
- allows you to use console.log
inside a jsdom script. defaults
to true.
useEach
- bind to Mocha's beforeEach
/afterEach
rather than before
/after
.
defaults to false.
skipWindowCheck
- skips checking of window
at startup. When false,
mocha-jsdom will throw an error if window
already exists. Defaults to false.
Yes, fully compatible with testling. A test suite using jsdom should be able to use testling.
See examples/basic for a setup that allows for testing via iojs (jsdom), testling, and mocha via the browser.
mocha-jsdom © 2014-2018 Rico Sta. Cruz. Released under the MIT License.
Authored and maintained by Rico Sta. Cruz with help from contributors (list).
FAQs
Simple integration of jsdom into mocha tests
The npm package mocha-jsdom receives a total of 4,300 weekly downloads. As such, mocha-jsdom popularity was classified as popular.
We found that mocha-jsdom demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.