web-dev-qa-db-ja.com

Mochaを使用したJSDOMのセットアップ

Reduxコンポーネントと非同期アクションをテストするためにsinonのモックとスパイを使用しようとしていますが、sinonをテストファイルにインポートするとすぐに、次のnpmスクリプトを実行します。

mocha --require test/helpers/browser.js --compilers。:babel-core/register --opts test/client/**/*。{js、jsx} --recursive test/client

次のエラーが発生します。

var div = typeof document !== "undefined" && document.createElement("div");
                                                      ^

TypeError:document.createElementは.../node_modules/sinon/lib/sinon/util/core/deep-equal.js:3:55の関数ではありません

browser.jsは、JSDOMを設定する場所です。

import { JSDOM } from 'jsdom';

const doc = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>');
cost win = doc.defaultView; // tried doc.window;

global.document = doc;
global.window = win;

/*
Object.keys(win).forEach(property => {
  if (typeof global[property] === 'undefined') {
    global[property] = win[property];
  }
});
*/

global.navigator = {
  userAgent: 'node.js'
};

Jsdomが正しく設定されていないと思いますか?周りを見回してみたところ、上記のbrowser.jsファイルでコメント付きのコードが見つかりましたが、コメントを外すとエラーが発生します。

Object.keys(win).forEach(function (property) {
       ^

TypeError:未定義またはnullをオブジェクトに変換できません。

8
mythereal

documentwindowのプロパティであり、その逆ではありません。

const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>');

global.window = dom.window;
global.document = dom.window.document;
28
ccprog