错误:看起来你没有加载全局文档就调用了`mount()`

cam*_*roe 9 reactjs enzyme

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

Lou*_*iro 12

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

来自Enzyme docs:

由于酶的mount API需要DOM,因此如果您尚未在浏览器环境(即Node环境)中使用mount,则需要使用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'
};
Run Code Online (Sandbox Code Playgroud)

阅读酶文档 - JSDOM获取更多信息

  • 嗯,我有同样的问题,当我尝试这个时,我得到'TypeError:jsdom不是函数`......? (4认同)

Vis*_*ati 6

npm install --save-dev --save-exact jsdom jsdom-global
Run Code Online (Sandbox Code Playgroud)

然后:

import 'jsdom-global/register'; //at the top of file, even before importing React
Run Code Online (Sandbox Code Playgroud)

更多信息在这里

替代方案:如果您在开玩笑地将酵素与

在您的中package.json,指定用于笑话的测试环境,jsdom如下所示:

"jest": {
  "testEnvironment": "jsdom"
}
Run Code Online (Sandbox Code Playgroud)

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

  • 对于笑话和酶,“testEnvironment”:“jsdom”解决方案是最简单的 (2认同)