2016-06-30 11 views
6

gdy próbuję mock localStorage komponentu reagować w żartach jak poniżej,Jak drwić localStorage.setIem i localStorage.removeItem żartem

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

i używane poniższy kod dla localStorage szyderczy

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

Co to jest błąd dostajesz? – jhhoff02

+0

Nie otrzymałem komunikatu o błędzie, ale linie nie są uwzględnione w testowaniu jednostkowym. – Nithila

Odpowiedz

3

Zrobiłem to dla przechowywania sesji do testowania sklepu, dodając plik skryptu środowiska instalacyjnego z następującymi elementami;

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

Plik package.json wtedy wygląda;

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

nie jestem przekonany rzeczywiście trzeba to w najnowszej wersji żartem jednak używałem tej konfiguracji, ponieważ znacznie wcześniejszej wersji.

Jedną z rzeczy przy stosowaniu tego podejścia musi być świadomość, że może on przechowywać dane między testami, więc będziesz chciał dodać następujące dane w beforeEach;

sessionStorage = {}; 
+0

Dziękuję za odpowiedź, ja też dodam ten plik setupEnvScriptFile do pliku package.json, ale linie LocalStorage w komponencie React nie są objęte testowaniem jednostkowym. – Nithila

+1

może ktoś mi pomóc rozwiązać powyższy problem, próbowałem wyszukiwania w innych witrynach, ale nie mogłem znaleźć żadnego rozwiązania dla niego. – Nithila

+0

Zostało zmienione od do: 'setupTestFrameworkScriptFile' – EliSherer

0

użyłem w moim projektu package.json:

"jest": { 
    "setupFiles": ["<rootDir>/app/mock/localStorageMock.js"] 
} 
Powiązane problemy