2017-01-18 3 views
0

jest와 jsdom을 내 반응 프로젝트에 설치했지만 window.localStorage 변수를 사용하는 반응 구성 요소를 가져 오는 데 문제가 있습니다. jsdom에 대한 설정 파일을 추가하여 문제를 해결할 수 있다고 생각했습니다. 여기 농담으로 jsdom을 구성하는 방법

내 설정이다 : package.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" 
    ] 
    } 

setup.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; 

test.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',() => { 

}); 

내 reportlet 구성 요소 사용 localStor 연령 변수하지만 으악 :

Cannot read property getItem of undefined 내가 농담이 jsdom와 함께 제공되는 오는 것을 here을 읽을 수는 있지만 내가 여분의 jsdom 의존성을 필요 아닌지 확실하지 않다 localStorage.getItem(<some item>)

를 호출 할 때. 나는 또한 here을 읽어 처음으로 반응을 요구하기 전에 jsdom을 로딩해야한다.

jsdom으로 jest를 올바르게 구성하는 방법을 아는 사람이 있습니까?

+1

jsdom은 로컬 스토리지를 지원하지 않습니다. 'node-localstorage'와 같은 노드 친화적 인 스텁을 사용할 수있는 것 같습니다. https://github.com/tmpvar/jsdom/issues/1137의 주석 하단을 보거나 https : //와 같은 것으로 조롱 할 수 있습니다. github.com/letsrock-today/mock-local-storage 또는 자신의 롤 http://stackoverflow.com/questions/11485420/how-to-mock-localstorage-in-javascript-unit-tests –

+1

아하겠습니다. jsdom에서 누락 된 기능에만 해당됩니다. 나는 node-localstorage의 제안 된 솔루션을 사용하여 문제를 해결했다. 이 형식을 정답으로 사용하면 정답으로 기꺼이 받아 들일 것입니다. –

+0

기꺼이 도와 드리겠습니다! 나는 내 컴퓨터로 돌아 왔을 때 답장을 할 것이다. (전화로). 감사! –

답변

1

jsdom은 localStorage를 지원하지 않습니다. 'node-localstorage'와 같은 노드 친화적 인 스텁을 사용할 수있는 것처럼 보입니다. https://github.com/tmpvar/jsdom/issues/1137

에서 의견의 하단을 참조하십시오 ... 또는 당신은 https://github.com/letsrock-today/mock-local-storage

처럼 뭔가를 조롱 ... 또는 여기에서 보이는 것처럼 자신의 모의를 롤백 할 수 있습니다 : How to mock localStorage in JavaScript unit tests?