it-swarm.com.de

Jest SecurityError: localStorage ist für undurchsichtige Herkunft nicht verfügbar

Wenn ich mein Projekt mit dem Befehl npm run test ausführen möchte, erhalte ich den folgenden Fehler. Was verursacht das?

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

Wenn Sie mit einem http://localhost-Präfix auf Ihre Anwendung zugreifen, müssen Sie Ihre Jest-Konfiguration (in Ihrem jest.config.js) wie

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

Falls Sie noch keine Scherzkonfiguration haben, fügen Sie die Konfiguration einfach in Ihren package.json ein. Zum Beispiel:

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

oder in jest.config.js:

module.exports = {
  verbose: true,
  testURL: "http://localhost/",
  ...
}

oder wenn Sie projects konfiguriert haben:

module.exports = {
  verbose: true,

  projects: [{
    runner: 'jest-runner',
    testURL: "http://localhost/",

    // ...
  }]
}
118
David R

Ich war gerade in einem großen Monorepo aufgetaucht (in Unit-Tests, die sonst nicht jsdom benötigt hätten). Wenn Sie Folgendes in unserem jest.config.js (oder dem Äquivalent von package.json) explizit festlegen, wurde dieses Problem ebenfalls gemildert:

module.exports = {
  testEnvironment: 'node'
}

Update: Wie Nicolas unten erwähnt (Danke!), Können Sie auch die folgenden Flags hinzufügen, wenn Sie keine Konfigurationsdateien verwenden:

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

Sie müssen angeben, welche Umgebung (--env) Sie verwenden möchten.

Wenn Sie den Befehl jest im package.json ausführen, sollten Sie die Umgebung angeben (jsdom oder node). Zum Beispiel:

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

Das sollte für Sie funktionieren!

15
Manuel Morejón

Wenn Sie jsdom verwenden, stellen Sie sicher, dass Sie URL einschließen.

Einfache Optionen für das jsdom-Repository. https://github.com/jsdom/jsdom#simple-options

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

const dom = new JSDOM(`...`, { url: "https://example.org/" });
4
p8ul

Das hört sich vielleicht dumm an, aber für mich wurde das Problem dadurch verursacht, dass ich zufällig Pakete mit npm update installiert hatte. Ich habe npm install und dann npm update ausgeführt, aber ich hätte nur npm install ausführen sollen. Ich habe das Problem behoben, indem ich das node_modules-Verzeichnis gelöscht und erneut npm install ausgeführt habe.

0
Rock Lee

Dies wurde bei der Integration von enzyme mit jest bei mir angezeigt. Die Github-Themendiskussion schlägt das gleiche vor, nämlich das Hinzufügen

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

zur Scherzkonfiguration Es ist jedoch gut zu wissen, dass dies auch durch das Enzym ausgelöst wird. Für mich war es React v15 und der Adapter v15. 

0
pascalwhoop

Der Vorschlag in der am besten bewerteten Antwort, testURL: "http://localhost" zu meiner Jest-Konfiguration hinzuzufügen, hat bei mir nicht funktioniert. Dieser Vorschlag aus der jsdom-GitHub-Diskussion , beim Erstellen des jsdom-Objekts eine URL zu übergeben, tat jedoch.

const url = 'http://localhost';

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

Sie müssen während der Arbeit mit React JS nichts tun. Es ist das Standardverhalten der Create-React-App, JEST zu platzieren und die Testumgebung einzurichten.

npm test

Wenn Sie eine Testabdeckung wünschen, müssen Sie lediglich die Datei package.json hinzufügen

"test": "reag-scripts test --coverage" Jetzt sieht Ihr "Skript" von package.json so aus:

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

}

0
Amjad Khan