当前位置: 首页 > 知识库问答 >
问题:

使用摩卡设置 JSDOM

仇飞鹏
2023-03-14

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

mocha -要求测试/助手/浏览器. js -编译器。:babel-core/register-opts test/client/* */*{js,jsx} -递归测试/客户端

我得到以下错误:

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

类型错误: document.createElement 不是函数在 .../node_modules/正弦/库/正弦/util/核心/深度相等.js:3:55

浏览器.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转换为对象。

共有1个答案

边永贞
2023-03-14

< code>document是< code>window的属性,而不是相反:

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

global.window = dom.window;
global.document = dom.window.document;
 类似资料:
  • 我正在尝试从请求模块测试GET HTTP方法: 下面是我如何测试 部分的: 但是,我没有找到测试catch部分的方法(当它给出错误并且响应状态不是>=400)。 有什么建议吗? 它也将帮助我解决这个问题,一个简单的例子,另一个代码测试一个承诺的catch部分。

  • 我正在使用mocha和chai对AngularJS服务执行一些单元测试。该服务具有不同的功能,每个功能都返回一个promise。 我面临的问题是,测试不是在断言之前等待promise值得到解决。我知道做()回调可以用摩卡。所以,我试着用它。但这也给了我一个错误。这是代码: 因此,现在的问题是测试没有失败(它应该失败)。相反,它只是超时并给我一个错误:“超时超过2000ms。请确保在此测试中调用了d

  • 我想先设置一些变量,在执行测试之前,我找到了这个解决方案,在每个套件之前运行摩卡设置,而不是在每次测试之前 但是,我不知道如何才能传递变量到我的回调,他们的方式我做了我会得到未定义 我之所以要将变量传递到回调中,是因为,我将有许多私有变量需要设置在钩子,并且我不想重复所有测试的代码。

  • 我正在尝试使用mocha和mongoose编写一个测试用例。但我编写的以下代码片段在每个“hook:error:timeout of 2000ms extered.确保在此测试中调用了done()回调”之前都给出了错误“Todo”。我无法解决此问题。我是node的初学者。谁能在这个问题上帮我一下吗。提前谢谢。

  • 问题内容: Mocha尝试在默认情况下查找测试文件,如何指定另一个目录,例如? 问题答案: 编辑:不建议使用此选项:https://mochajs.org/#mochaopts 如果要通过仍然仅在命令行上运行但要在文件夹而不是中运行测试来执行此操作,请在文件中创建一个文件,其中包含以下内容: 如果要运行该文件夹和子目录中的所有内容,请将其放入 是通过命令行传递的参数,因此使第一行也就是您要更改测试

  • 问题内容: 我希望能够同时启动我在Mocha中的所有describe语句。有人可以帮我弄清楚该怎么做吗? 问题答案: 您无法直接使用mocha进行此操作,因为它会创建it()回调的列表并按顺序调用它们。 如果您愿意将自己的描述移到单独的.js文件中,mocha- parallel-tests 可以执行此操作。为了说服自己,请将其安装在某个地方,然后用–low缓慢调用它,以便每次都报告: 您将看到它