2016-08-15 4 views
2

sinon을 사용하여 localStorage을 테스트하려고합니다. 기본적으로 이것은 단위 테스트에 매우 익숙하기 때문에 이것은 매우 기초적 일 수 있습니다.sinon을 사용하여 localStorage를 단위 테스트하는 방법

업데이트

나는이 마련하는 데 성공하지만 지금은 나에게 새로운 오류를주는 Should wrap property of object

테스트

describe('Initial State',() => { 
    it('should set the initial state for the component',() => { 
const props = { 
     currentUser: {} 
     }; 
     sinon.stub(window.localStorage, 'setItem'); 
     window.localStorage.setItem('none', 'nothing'); 
    }); 
    }); 
+0

참조 : http : //stackoverflow.duapp.com/questions/37755589/mocking-window-with-sinon-mocha-enzyme-and-react/37756901 – anoop

+0

테스트의 요점은 무엇입니까? –

+0

@anoop 나는 그걸 겪었습니다. 이전에'location' 객체를 같은 절차와 작동 원리로 테스트했습니다. 그러나,이 경우에는'정의되지 않은 속성 setItem을 함수로 감싸려고 시도했습니다. ' – Umair

답변

2

조롱과 당신은 로컬 스토리지를 대체 할 babel-plugin-rewire을 사용할 수 있습니다 버전을 테스트합니다.

import {unauth, signOut, __RewireAPI__} from 'modules/auth/actions'; 

const rewrite = __RewireAPI__.__Rewire__; 

const local = {}; // object where you store all values localStorage needs to return 
const storage = { 
    get(key) { 
    return local[key]; 
    }, 
    set: sinon.spy(), 
    remove: sinon.spy() 
}; 

rewrite('storage', storage); // rewrite storage package with your mocked version 

// in you test add values you want to get from localStorage 
local.credentials = constants.CREDENTIALS; 
local.authToken = constants.TOKEN; 
+0

나는 다른 패키지를보고 localStore를 조롱했다. 이것은 맞을 수도 있지만 내가 달성하려고 노력하는 것은 수동으로 전역 객체를 조롱하는 것입니다. global.window = {localStorage : {..}와 같은 것입니다. – Umair

6

내가 그것을 해결하기 위해 관리 :

이 내가 그것을 사용하는 방법입니다. 그의 대답은 도움이 되었기 때문에 @anoop에게 감사 드려요. 그러나 중요한 해결 방법으로 그것을 관리해야했습니다. jsdom을 사용하고 있으며 현재 을 지원하지 않습니다. localStorage입니다. 내 jsdom 구성에 가짜를 추가했습니다. 참조 또한

it('should fetch from local storage',() => { 
     const props = { 
     currentUser: 'UMAIR', 
     user: { 
      is_key: false 
     } 
     }; 

     const spy = sinon.spy(global.window.localStorage, "setItem"); 
     spy(props); 
     expect(spy.calledWith({ 
     currentUser: 'UMAIR', 
     user: { 
      is_key: false 
     } 
     })); 
     spy.restore(); 

     const stub = sinon.stub(global.window.localStorage, 'getItem'); 
     stub(props); 
     expect(stub.calledWith(Object.keys(props))); 
// stub.restore(); 
    }); 

: How to mock localStorage in JavaScript unit tests?

https://github.com/gor181/webpack-react-babel-mocha-boilerplate/tree/master/test/utils

나는 또한 주일 전에 그 가지고 있지만이 관련 Sinon에 내부 문제를 발견

if (!global.window.localStorage) { 
    global.window.localStorage = { 
    getItem() { return '{}'; }, 
    setItem() {} 
    }; 
} 

는 그리고 그것을 주장 해결되었습니다.

참조 :이 사람을 도움이 https://github.com/sinonjs/sinon/issues/1129

희망.

관련 문제