Javascript 使用Mocha设置JSDOM

Javascript 使用Mocha设置JSDOM,javascript,node.js,redux,mocha.js,jsdom,Javascript,Node.js,Redux,Mocha.js,Jsdom,我正试图使用sinon的mock和spy来测试Redux组件和异步操作,但一旦我将sinon导入任何测试文件,就会运行以下npm脚本: mocha--需要test/helpers/browser.js--编译器:babel core/register--opts test/client/***.{js,jsx}--递归测试/客户端 我得到以下错误: var div = typeof document !== "undefined" && document.createElemen

我正试图使用sinon的mock和spy来测试Redux组件和异步操作,但一旦我将sinon导入任何测试文件,就会运行以下npm脚本:

mocha--需要test/helpers/browser.js--编译器:babel core/register--opts test/client/***.{js,jsx}--递归测试/客户端

我得到以下错误:

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'
};
TypeError:无法将未定义或null转换为对象


文档
窗口
的属性,而不是相反:

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

global.window = dom.window;
global.document = dom.window.document;
constdom=newjsdom(“”);
global.window=dom.window;
global.document=dom.window.document;

谢谢,这已经解决了!这也是一种普遍的反模式
const dom = new JSDOM('<!DOCTYPE html><html><head></head><body></body></html>');

global.window = dom.window;
global.document = dom.window.document;