2016-08-15 3 views
2

Я пытаюсь проверить localStorage используя синус. В принципе, я очень новичок в модульном тестировании, поэтому это может быть очень простым.Как протестировать localStorage с помощью синона

Update

мне удалось придумать с этим, но теперь его дать мне новую ошибку 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

Refer this ... 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 заменить LocalStorage с издевались версии во всех ваших тестах.

Это, как я использую его:

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.

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

И утверждал его:

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 неделю назад, связанные с этим, но что есть были решены.

См: https://github.com/sinonjs/sinon/issues/1129

Надеется, что это поможет кому-то.

Смежные вопросы