2016-06-30 3 views
6

, когда я пытаюсь дразнить LocalStorage в виде среагировать компонента в шутке, как показано ниже,Как издеваются localStorage.setIem и localStorage.removeItem шутя

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 издевательский

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, но все же строки localStorage в компоненте React не рассматриваются в модульном тестировании. – Nithila

+1

может кто-нибудь помочь мне решить вышеупомянутую проблему, я пробовал искать на других сайтах, но я не мог найти для этого решения. – Nithila

+0

С тех пор он изменился: 'setupTestFrameworkScriptFile' – EliSherer

0

Я использовал это в package.json мой проекта:

"jest": { 
    "setupFiles": ["<rootDir>/app/mock/localStorageMock.js"] 
} 
Смежные вопросы