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

时间:2016-05-08 19:35:33

标签: reactjs enzyme

我试图安装一个用酶测试的组件,并得到这个错误。

3 个答案:

答案 0 :(得分:9)

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

来自Enzyme docs

  

由于酶的mount API需要DOM,因此需要使用JSDOM   如果您尚未在浏览器环境中使用mount(即Node)   环境)。

     

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'
};

阅读Enzyme documentation - JSDOM了解更多信息

答案 1 :(得分:3)

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

然后:

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

更多信息here

替代:如果你正在使用与酶的玩笑 -

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

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

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

答案 2 :(得分:1)

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

/**
 * @jest-environment jsdom
*/