2016-06-30 5 views
6

iは以下のように冗談で反応成分のlocalStorageを模擬しようとすると、冗談

spyOn(window.localStorage,'removeItem'); 
window.localStorage.removeItem("key1"); 
window.localStorage.removeItem("key2"); 
expect(window.localStorage.removeItem).toHaveBeenCalledWith("key1"); 
expect(window.localStorage.removeItem).toHaveBeenCalledWith("key2"); 

をlocalStorage.setIemとlocalStorage.removeItemを模擬し、モックのlocalStorageのために以下のコードを使用する方法

let localStorageMock = (function() { 
    var storage = {}; 

    return { 
    setItem: function(key, value) { 
     storage[key] = value || ''; 
    }, 
    getItem: function(key) { 
     return storage[key] || null; 
    }, 
    removeItem: function(key) { 
     delete storage[key]; 
    }, 
    get length() { 
     return Object.keys(storage).length; 
    }, 
    key: function(i) { 
     var keys = Object.keys(storage); 
     return keys[i] || null; 
    } 
    }; 
})(); 
Object.defineProperty(window, 'localStorage', { value: localStorageMock }); 
+0

をあなたが取得しているエラーは何ですか? – jhhoff02

+0

エラーメッセージは表示されませんでしたが、この行は単体テストの対象外です。 – Nithila

答えて

3

これは、ストアテスト用のセッションストレージ用に以下の設定を含むセットアップ環境スクリプトファイルを追加して行いました。

Object.defineProperty(window, 'sessionStorage', { value: {}, writable: true });

package.jsonファイルは、次のようになります。

"jest": { "setupEnvScriptFile": "jest/jest-setupEnvScriptFile.js",

私は実際にあなたがしかし、私はずっと以前のバージョンから、この設定を使用しました冗談の最新バージョンでこれを必要と確信していません。

このアプローチを使用する場合、テスト間にデータを保持できるので、beforeEachに次のコードを追加することをお勧めします。

sessionStorage = {}; 
+0

返信いただきありがとうございます。このsetupEnvScriptFileもpackage.jsonに追加しますが、ReactコンポーネントのlocalStorage行は単体テストではカバーされません。 – Nithila

+1

誰も私が上記の問題を解決するのを助けることができる、私は他のサイトで検索しようとしたが、私はそれのための任意の解決策を見つけることができませんでした。 – Nithila

+0

次のように変更されました: 'setupTestFrameworkScriptFile' – EliSherer

0

私は私のプロジェクトのpackage.jsonでこれを使用:

"jest": { 
    "setupFiles": ["<rootDir>/app/mock/localStorageMock.js"] 
} 
関連する問題