Jest SecurityError:localStorage不适用于不透明的来源

时间:2018-07-27 08:56:39

标签: javascript node.js npm jestjs

当我想使用命令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>)

13 个答案:

答案 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命令时,应指定环境(jsdomnode)。例如:

  "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)

enzymejest集成在一起时,这突然出现。 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/" }