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/" });