Instalé jest y jsdom en mi proyecto de reacción, pero tengo problemas para importar un componente de reacción que usa la variable window.localStorage . He agregado un archivo de instalación para jsdom que creía que resolvería el problema.
He aquí mi arreglo:
configuración de broma en paquete.json
"jest": { "verbose": true, "testEnvironment": "jsdom", "testURL": "http://localhost:8080/Dashboard/index.html", "transform": { "^.+\\.js$": "<rootDir>/node_modules/babel-jest", "^.+\\.jsx$": "<rootDir>/node_modules/babel-jest" }, "unmockedModulePathPatterns": [ "node_modules/react/", ], "moduleFileExtensions": [ "js", "jsx", "json", "es6" ] }configuración.js
import jsdom from 'jsdom'; const DEFAULT_HTML = '<html><body></body></html>'; global.document = jsdom.jsdom(DEFAULT_HTML); global.window = document.defaultView; global.navigator = window.navigator; global.localStorage = window.localStorage;prueba.js
'use strict'; import setup from './setup'; import React from 'react'; import jsdom from 'jsdom'; import Reportlet from '../components/Reportlet.jsx'; it('Ensures the react component renders', () => { });Mi componente reportlet usa la variable localStorage pero grita:
Cannot read property getItem of undefined cuando llamo a localStorage.getItem(<some item>)
Leí aquí que jest viene con jsdom, pero no estoy seguro de si necesito la dependencia adicional de jsdom o no. También leí aquí que jsdom debe cargarse antes de requerir reaccionar por primera vez.
¿Alguien sabe cómo configurar jest con jsdom correctamente?
jsdom no admite almacenamiento local. Parece que puede usar un código auxiliar compatible con nodos como 'node-localstorage'. Vea la parte inferior de los comentarios en https://github.com/tmpvar/jsdom/issues/1137
...o puedes simularlo con algo como https://github.com/letsrock-today/mock-local-storage
... o haga su propio simulacro como se ve aquí: ¿Cómo simular el almacenamiento local en las pruebas unitarias de JavaScript?