1

I am writing some unit tests in TypeScript 2.4.2 for a library written in the same language. Some test case require access to properties such document.location.href, so I need to mock the DOM. The test runner is Mocha and the assertion framework is Chai.

JBENOIT
  • 421
  • 3
  • 14
  • Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. See: How to create a [mcve]. Use the "edit" link to improve your *question* - do not add more information via comments. Thanks! – GhostCat Aug 08 '17 at 09:29
  • **Doesnt work** isnt a working problem description for us. Consider putting up that [mcve] and clearly describing in which way "it doesnt work" and fails your expectations. – GhostCat Aug 08 '17 at 09:29
  • 1
    @GhostCat I just edit my question. My problem is not about a specific code but more "how to do that". – JBENOIT Aug 08 '17 at 09:35

1 Answers1

3

Well, after many hours of headache and this post on SO, I finally find a way to do it:

  1. Install the jsdom-global and jsdom module: npm install --save-dev jsdom jsdom-global
  2. Create a file named dom-mock.js, for example.
  3. In this file, add this:

require('jsdom-global')(/* any html you need */, {
    /* any jsdom options you need, e.g: */
    url: "https://example.org/",
    referrer: "https://example.com/"
});
  1. Run the tests by registering the dom mock you just created: mocha -r tests/mocks/dom-mock.js -r ts-node/register tests/*.ts

If you do not need DOM customization, just run mocha -r jsdom-global/register -r ts-node/register tests/*.ts

JBENOIT
  • 421
  • 3
  • 14