17

我正在尝试安装一个组件来测试酶,并得到这个错误。

4

3 回答 3

20
npm install --save-dev --save-exact jsdom jsdom-global

然后:

import 'jsdom-global/register'; //at the top of file, even before importing React

更多信息在这里

替代方案:如果您使用酶开玩笑-

在您的package.json中,为 jest 指定测试环境,jsdom如下所示:

"jest": {
  "testEnvironment": "jsdom"
}

我遇到了同样的问题,它对我来说效果很好。

于 2017-08-02T12:23:13.023 回答
14

Mocha 不在浏览器环境中运行您的测试,因此没有 DOM。要解决此问题,您只需使用 jsdom npm 模块创建 DOM。

来自酶文档

由于酶的挂载 API 需要 DOM,如果您还没有处于浏览器环境(即 Node 环境)中,则需要 JSDOM 才能使用挂载。

JSDOM 是一个基于 JavaScript 的无头浏览器,可用于创建真实的测试环境。

为了获得最佳的酶体验,建议您在第一次需要 React 之前将文档加载到全局范围中。在运行 React 的代码之前运行以下脚本非常重要。

因此,像下面这样的独立脚本通常是一种好方法:

/* setup.js */

var jsdom = require('jsdom').jsdom;

var exposedProperties = ['window', 'navigator', 'document'];

global.document = jsdom('');
global.window = document.defaultView;
Object.keys(document.defaultView).forEach((property) => {
  if (typeof global[property] === 'undefined') {
    exposedProperties.push(property);
    global[property] = document.defaultView[property];
  }
});

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

阅读酶文档 - JSDOM了解更多信息

于 2016-05-10T08:21:21.613 回答
4

只需将以下内容放在测试文件的顶部

/**
 * @jest-environment jsdom
*/
于 2017-09-12T10:30:07.253 回答