当我想使用命令npm run test
运行我的项目时,出现以下错误。是什么原因造成的?
FAIL
● Test suite failed to run
SecurityError: localStorage is not available for opaque origins at Window.get localStorage [as localStorage] (node_modules/jsdom/lib/jsdom/browser/Window.js:257:15)
at Array.forEach (<anonymous>)
答案 0 :(得分:121)
万一,如果您使用http://localhost
前缀访问应用程序,则需要将jest.config.js
中的jest配置更新为
"jest": {
"verbose": true,
"testURL": "http://localhost/"
}
如果您还没有任何有趣的配置,只需将配置包括在package.json
中即可。例如:
{
"name": "...",
"description": "...",
...
"jest": {
"verbose": true,
"testURL": "http://localhost/"
}
}
或在jest.config.js
中:
module.exports = {
verbose: true,
testURL: "http://localhost/",
...
}
或者如果您已配置projects
:
module.exports = {
verbose: true,
projects: [{
runner: 'jest-runner',
testURL: "http://localhost/",
// ...
}]
}
答案 1 :(得分:73)
我只是在一个大型的reinrepo中出现了(在单元测试中,否则不需要jsdom)。在我们的jest.config.js
(或等效的package.json
)中明确设置以下内容也可以缓解该问题:
module.exports = {
testEnvironment: 'node'
}
更新:正如下面的尼古拉斯提到的(谢谢!),如果您不使用任何配置文件,也可以添加以下标志:
jest --testEnvironment node
# or
jest --env=node
答案 2 :(得分:16)
您必须指定要使用的环境(--env
)。
在jest
中运行package.json
命令时,应指定环境(jsdom
或node
)。例如:
"scripts": {
"jest": "jest --env=node --colors --coverage test",
"test": "npm run jest"
},
这应该为您工作!
答案 3 :(得分:5)
如果您使用的是jsdom,请确保包含url。
检出jsdom存储库简单选项。 https://github.com/jsdom/jsdom#simple-options
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`...`, { url: "https://example.org/" });
答案 4 :(得分:2)
要解决Jest SecurityError: localStorage
错误,您需要将 jest: { ... }
部分添加到 package.json 文件
{
"name": "...",
"version": "..",
"main": "..",
"description": "...",
...
"jest": { "verbose": true, "testURL": "http://localhost/" },
}
答案 5 :(得分:1)
在我的Jest配置中添加testURL: "http://localhost"
的最高答案中的建议对我不起作用。但是,this suggestion from the jsdom GitHub discussion在创建jsdom对象时传递了URL。
const url = 'http://localhost';
const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', { url });
答案 6 :(得分:0)
这听起来很愚蠢,但是对我来说,问题是由于我错误地用npm update
安装了随机软件包而引起的。我先运行npm install
,然后运行npm update
,但我应该只运行npm install
。我通过删除node_modules
目录并再次运行npm install
来解决此问题。
答案 7 :(得分:0)
使用React JS时,您无需执行任何操作。放置JEST和设置测试环境是create-react-app的默认行为。 在以下运行时,它开始显示测试成功或失败,
npm测试
如果要覆盖测试范围,只需在package.json文件中添加以下内容
“ test”:“反应脚本测试--coverage” 现在,您的package.json的“脚本”看起来像
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --coverage",
"eject": "react-scripts eject"
}
答案 8 :(得分:0)
将enzyme
与jest
集成在一起时,这突然出现。 Github Issue Discussion的建议与上述相同,即添加
"testURL": "http://localhost/"
到jest配置。但是,很高兴知道这也是由酶触发的。对我来说是React v15和v15适配器。
答案 9 :(得分:0)
对我来说,这是通过升级为“ jest”:“ ^ 24.9.0”解决的,
答案 10 :(得分:0)
我遇到了同样的问题,并将其放在我的package.json
文件中对我来说是有效的:
"jest": {
"verbose": true,
"testURL": "http://localhost/"
}
答案 11 :(得分:0)
如果您使用的是jsdom,则必须更改测试设置,如下所示:
const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>', {
url: 'http://localhost/',
});```
答案 12 :(得分:0)
只需在 package.json 文件中包含以下代码
"jest": { "verbose": true, "testURL": "http://localhost/" }