javascript - 使用 Mocha 设置 JSDOM

标签 javascript node.js redux mocha.js jsdom

我正在尝试使用 sinon 的 mock 和 spy 来测试 Redux 组件和异步操作,但是一旦我将 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 is not a function at .../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: Cannot convert undefined or null to object.

最佳答案

documentwindow 的属性,而不是相反:

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

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

关于javascript - 使用 Mocha 设置 JSDOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960608/

相关文章:

javascript - 使用 JavaScript 从 Amazon Cognito API 中详尽选择所有用户的安全且可扩展的方法是什么?

node.js - 永远检测到脚本已退出,代码为 : 0

javascript - sinon:如何 stub 实例方法

javascript - 从 MySQL 获取数据并使用 Node.js 将其输出到 HTML

reactjs - React+Redux - 管理自动完成输入的状态

javascript - 扩展 jQuery 插件,无需触及原始插件代码

javascript - 如何使用javascript计算出哪个变量具有最多的字符

javascript - 通过多个 Action 类型来约束 reducer

javascript - 为您的项目修改 twitter bootstrap javascript 时的最佳实践是什么

javascript - Redux 调度程序未按预期更改状态