Jest SecurityError: localStorage недоступен для непрозрачного происхождения
Когда я хочу запустить проект с помощью команды 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
В случае, если вы обращаетесь к своему приложению с помощью префикса http://localhost
, вам необходимо обновить конфигурацию jest (в jest.config.js
), как,
"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/",
// ...
}]
}
Ответ 2
Я просто получил это в большом monorepo (в модульных тестах, которые иначе не требовали бы jsdom). Явно устанавливая следующее в нашем jest.config.js
(или эквиваленте package.json
), также jest.config.js
эту проблему:
module.exports = {
testEnvironment: 'node'
}
Обновление: как упоминалось ниже в Nicolas (спасибо!), Вы также можете добавить следующие флаги, если вы не используете какие-либо файлы конфигурации:
jest --testEnvironment node
# or
jest --env=node
Ответ 3
Вы должны указать, какую среду (--env
) вы собираетесь использовать.
Когда вы запускаете команду jest
в package.json
вы должны указать среду (jsdom
или node
). Например:
"scripts": {
"jest": "jest --env=node --colors --coverage test",
"test": "npm run jest"
},
Это должно сработать для вас!
Ответ 4
Если вы используете jsdom, убедитесь, что вы указали URL-адрес.
Checkout jsdom репозиторий простые параметры. https://github.com/jsdom/jsdom#simple-options
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM('...', { url: "https://example.org/" });
Ответ 5
Это может показаться глупым, но для меня проблема была вызвана тем, что я ошибочно установил случайные пакеты с npm update
. Я запускал npm install
а затем npm update
но мне нужно было только npm install
. Я исправил проблему, удалив каталог node_modules
и снова запустив npm install
.