我试图安装一个用酶测试的组件,并得到这个错误。
答案 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
*/