testurl securityerror origins opaque not localstorage for available javascript node.js npm jestjs

javascript - securityerror - jest testurl



Jest SecurityError: localStorage no está disponible para orígenes opacos (8)

Cuando quiero ejecutar mi proyecto con el comando npm run test , npm run test el siguiente error. ¿Qué está causando esto?

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


Acabo de tener este recorte en un monorepo grande (en pruebas de unidad, que de otro modo no habría requerido jsdom). La configuración explícita de lo siguiente en nuestro jest.config.js (o el equivalente de package.json ) también solucionó ese problema:

module.exports = { testEnvironment: ''node'' }

Actualización: como Nicolás mencionó a continuación (¡gracias!), También puede agregar los siguientes indicadores si no está utilizando ningún archivo de configuración:

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


Debe especificar qué entorno ( --env ) va a utilizar.

Cuando ejecute el comando jest en package.json , debe especificar el entorno ( jsdom o node ). Por ejemplo:

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

Esto debería funcionar para usted!


En caso de que, si está accediendo a su aplicación con un prefijo http://localhost , necesita actualizar su configuración de jest (en su jest.config.js ) como,

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

En caso de que aún no tenga ninguna configuración jest, simplemente incluya la configuración en su package.json . Por ejemplo:

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

o en jest.config.js :

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

o si tiene projects configurados:

module.exports = { verbose: true, projects: [{ runner: ''jest-runner'', testURL: "http://localhost/", // ... }] }


Esto apareció conmigo al integrar la enzyme con la jest . La discusión del tema de Github sugiere lo mismo que se indicó anteriormente, es decir, agregar

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

a la configuración jest. Sin embargo, es bueno saber que esto también es activado por la enzima. Para mí fue React v15 y el adaptador v15.


Esto puede parecer una tontería, pero para mí, el problema se debió a que, por error, había instalado paquetes aleatorios con la npm update . Estaba ejecutando npm install y luego npm update pero debería haber ejecutado solo npm install . npm install el problema eliminando el directorio node_modules y ejecutando npm install nuevo.


La sugerencia en la respuesta mejor calificada de agregar testURL: "http://localhost" a mi configuración de Jest no funcionó para mí. Sin embargo, esta sugerencia de la discusión jsdom GitHub , de pasar una URL al crear el objeto jsdom, lo hizo.

const url = ''http://localhost''; const dom = new JSDOM(''<!DOCTYPE html><html><body></body></html>'', { url });


No necesita hacer nada mientras trabaja con React JS. Es el comportamiento predeterminado de la aplicación crear-reaccionar para colocar JEST y configurar el entorno de prueba. En la ejecución de abajo, comienza a mostrar el éxito o fracaso de la prueba,

prueba de npm

En caso de que desee una cobertura de prueba, simplemente necesita agregar más abajo al archivo package.json

"prueba": "prueba de react-scripts - cobertura" Ahora su "secuencia de comandos" de package.json se ve así,

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

}


Si está utilizando jsdom, asegúrese de incluir url.

Opciones simples para el repositorio jsdom. https://github.com/jsdom/jsdom#simple-options

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