web-dev-qa-db-fra.com

Jest SecurityError: localStorage n'est pas disponible pour les origines opaques

Lorsque je veux exécuter mon projet avec la commande npm run test, le message d'erreur ci-dessous s'affiche. Qu'est-ce qui cause ça?

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

Si vous accédez à votre application avec un préfixe http://localhost, vous devez mettre à jour votre configuration de plaisanterie (dans votre jest.config.js) en tant que,

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

Si vous n'avez pas encore de configuration plaisante, incluez-la simplement dans votre package.json. Par exemple:

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

ou en jest.config.js:

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

ou si vous avez projects configuré:

module.exports = {
  verbose: true,

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

    // ...
  }]
}
118
David R

Je viens d'avoir cela surgir dans un grand monorepo (dans les tests unitaires, qui n'auraient autrement pas besoin de jsdom). La définition explicite de ce qui suit dans notre jest.config.js (ou l'équivalent package.json) a également résolu ce problème:

module.exports = {
  testEnvironment: 'node'
}

Mise à jour: Comme Nicolas mentionné ci-dessous (merci!), Vous pouvez également ajouter les indicateurs suivants si vous n'utilisez aucun fichier de configuration:

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

Vous devez spécifier quel environnement (--env) allez-vous utiliser.

Lorsque vous exécutez la commande jest dans le package.json, vous devez spécifier l'environnement (jsdom ou node). Par exemple:

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

Cela devrait fonctionner pour vous!

15
Manuel Morejón

Si vous utilisez jsdom, assurez-vous d'inclure l'URL.

Commander les options simples du référentiel 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

Cela peut paraître idiot, mais pour moi, le problème a été causé par l’installation par erreur de paquets aléatoires avec npm update. J'exécutais npm install et ensuite npm update mais je n'aurais dû exécuter que npm install. J'ai résolu le problème en supprimant le répertoire node_modules et en exécutant à nouveau npm install.

0
Rock Lee

Cela m'est apparu lors de l'intégration de enzyme avec jest. La Discussion sur le problème Github suggère la même chose que celle indiquée ci-dessus, à savoir l’ajout de

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

à la config de plaisanterie Cependant, il est bon de savoir que cela est également déclenché par une enzyme. Pour moi, c'était React v15 et l'adaptateur v15. 

0
pascalwhoop

La suggestion dans la réponse la mieux notée d'ajouter testURL: "http://localhost" à ma configuration Jest n'a pas fonctionné pour moi. Cependant, cette suggestion de la discussion jsdom GitHub , de transmettre une URL lors de la création de l’objet jsdom, s’est faite.

const url = 'http://localhost';

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

Vous n'avez rien à faire lorsque vous travaillez avec React JS. C’est le comportement par défaut de l’application create-react-app de placer JEST et de configurer l’environnement de test.

test npm

Si vous souhaitez tester la couverture, il vous suffit d’ajouter ci-dessous un fichier package.json.

"test": "react-scripts test --coverage" Maintenant, votre "script" de package.json ressemble,

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

}

0
Amjad Khan