2016-08-15 5 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

あなたは嘲笑とのlocalStorageを置き換えるために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設定で偽物を追加しました。

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

希望。

関連する問題