it-roy-ru.com

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>)
126
amirdehghan

В случае, если вы обращаетесь к своему приложению с префиксом http://localhost, вам необходимо обновить конфигурацию jest (в вашем jest.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/",

    // ...
  }]
}
118
David R

Я только что получил это в большом monorepo (в модульных тестах, которые иначе не потребовали бы jsdom). Явная установка следующего в нашем jest.config.js (или package.json эквиваленте) также разрешила эту проблему:

module.exports = {
  testEnvironment: 'node'
}

Обновление: Как упоминал Николас (спасибо!), Вы также можете добавить следующие флаги, если вы не используете какие-либо конфигурационные файлы:

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

Вы должны указать, какую среду (--env) вы собираетесь использовать.

Когда вы запускаете команду jest в package.json, вы должны указать среду (jsdom или node). Например:

  "scripts": {
    "jest": "jest --env=node --colors --coverage test",
    "test": "npm run jest"
  },

Это должно работать для вас!

15
Manuel Morejón

Если вы используете 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
p8ul

Это может показаться глупым, но для меня проблема была вызвана тем, что я по ошибке установил случайные пакеты с npm update. Я запускал npm install, а затем npm update, но я должен был только запустить npm install. Я исправил проблему, удалив каталог node_modules и снова запустив npm install.

0
Rock Lee

Это всплыло у меня при интеграции enzyme с jest. Обсуждение проблемы Github предлагает то же самое, что отмечено выше, а именно добавление

"testURL": "http://localhost/"

в шутку конфиг. Тем не менее, хорошо знать, что это вызвано также ферментом. Для меня это был React v15 и адаптер v15. 

0
pascalwhoop

Предложение в ответе с самым высоким рейтингом о добавлении testURL: "http://localhost" в мою конфигурацию Jest не сработало для меня. Однако это предложение из обсуждения jsdom GitHub , передающее URL при создании объекта jsdom, сделало.

const url = 'http://localhost';

const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', { url });
0
Scott Martin

Вам не нужно ничего делать при работе с React JS. Это поведение по умолчанию для приложения create-реагировать на приложение, чтобы разместить JEST и настроить среду тестирования . При запуске ниже, он начинает показывать успех теста или неудачу,

тест npm

Если вы хотите тестовое покрытие, вам просто нужно добавить ниже в файл package.json

"test": "test-scripts test --coverage" Теперь ваш «скрипт» package.json выглядит так:

"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --coverage",
"eject": "react-scripts eject"

}

0
Amjad Khan