Jest SecurityError:localStorage 不可用于不透明源

2022-08-30 02:30:33

当我想使用命令运行我的项目时,我收到下面的错误。这是什么原因造成的?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>)

答案 1

以防万一,如果您使用前缀访问应用程序,则需要更新您的jest配置(在您的 中),如下所示:http://localhostjest.config.js

  "jest": {
    "verbose": true,
    "testURL": "http://localhost/"
  }

如果您还没有任何 jest 配置,只需将配置包含在 .例如: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/",

    // ...
  }]
}

对于 中的配置,testURL 在 jest v28 中被删除。现在你应该使用testEnvironmentOptions来传递url选项,如下所示:package.json

"jest": {
    "verbose": true,
    "testEnvironmentOptions": {
        "url": "http://localhost/"
    }
}

答案 2

我只是在一个大型monorepo中突然出现了这个(在单元测试中,否则不需要jsdom)。在我们(或等效项)中显式设置以下内容也缓解了这个问题:jest.config.jspackage.json

module.exports = {
  testEnvironment: 'node'
}

更新:正如Nicolas在下面提到的(谢谢!),如果你没有使用任何配置文件,你也可以添加以下标志:

jest --testEnvironment node    
# or 
jest --env=node