javascript - Jest SecurityError: localStorage är inte tillgängligt för ogenomskinliga ursprung
När jag vill köra mitt projekt med kommandot npm run test, får jag felet nedan. Vad orsakar detta?
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>)
Svar #1
Om du skulle komma åt din applikation med prefixet http://localhost, behöver du uppdatera din jest-konfiguration (i din jest.config.js) enligt,
"jest": {
"verbose": true,
"testURL": "http://localhost/"
}
Om du inte redan har någon jest-konfiguration, inkludera bara konfigurationen i din package.json. Till exempel:
{
"name": "...",
"description": "...",
...
"jest": {
"verbose": true,
"testURL": "http://localhost/"
}
}
eller i jest.config.js :
module.exports = {
verbose: true,
testURL: "http://localhost/",
...
}
eller om du har projects konfigurerade:
module.exports = {
verbose: true,
projects: [{
runner: 'jest-runner',
testURL: "http://localhost/",
// ...
}]
}
för konfiguration i package.json, tas testURL bort i jest v28. Nu bör du använda testEnvironmentOptions för att skicka url-alternativ så här:
"jest": {
"verbose": true,
"testEnvironmentOptions": {
"url": "http://localhost/"
}
}
Svar #2
Jag stötte precis på detta i ett stort monorepo (i enhetstester, som annars inte skulle ha krävt jsdom). Att uttryckligen ställa in följande i vår jest.config.js (eller motsvarigheten i package.json) lindrade också det problemet:
module.exports = {
testEnvironment: 'node'
}
Uppdatering: Som Nicolas nämnde nedan (tack!), kan du också lägga till följande flaggor om du inte använder några konfigurationsfiler:
jest --testEnvironment node
or
jest --env=node
Svar #3
Du måste specificera vilken miljö (--env) du ska använda.
När du kör jest-kommandot i package.json bör du specificera miljön (jsdom eller node). Till exempel:
"scripts": {
"jest": "jest --env=node --colors --coverage test",
"test": "npm run jest"
},
Detta borde fungera för dig!
Svar #4
Jag hade samma problem och att manuellt installera jest-environment-jsdom version 28 (baserat på denna GitHub-tråd) löste det.
Svar #5
Om du använder jsdom, se till att du inkluderar url.
Kolla in jsdom-förrådets enkla alternativ. https://github.com/jsdom/jsdom#simple-options
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`...`, { url: "https://example.org/" });
