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.