2014-06-13 19 views
13

Używam kątomierza (z jaśminem) do testowania aplikacji AngulaJs.Kątomierz - pusty lokalny magazyn

W wyniku niektórych moich działań otrzymuję dane zapisane w lokalnym usłudze. Teraz muszę przetestować inny przypadek, więc trzeba opróżnić mój przechowywanie (lub lepiej usunąć tylko niektóre elementy), ale jeśli próbuję uruchomić:

browser.executeScript('localStorage.removeItem("config");'); 

pojawia się następujący błąd:

UnknownError: <unknown>: Failed to read the 'localStorage' property from 'Window': Storage is disabled inside 'data:' URLs. 
    (Session info: chrome=35.0.1916.153) 
    (Driver info: chromedriver=2.10.267517,platform=Mac OS X 10.9.2 x86_64) 

Masz pomysł, jak rozwiązać?

Dzięki z góry

Odpowiedz

3

nie znalazłem fajny sposób, aby to zrobić, ale jeśli uruchomię moje oświadczenie

browser.executeScript("localStorage.removeItem('config');") 

w nim („opis”) oświadczenie to działa. Przykład:

it('should compile and save base config for billing',function(){ 
    browser.executeScript("localStorage.removeItem('config');") 

    //my test 
}); 

to usunięcie elementu o nazwie config, a więc moje prace badawcze, ale podczas poszukiwania i rozmawiać o tym problemie głównym odpowiedź mam to:

„localStorage nie jest Ci produkt, więc nie trzeba (czytaj: nie wolno) sprawdzać, właściwą drogą jest przedszkole i wstrzykiwanie jej, gdy są potrzebne "

Nadal szukam tego w understrand, jak to w międzyczasie sądzę, że nie filozoficznie doskonały test jest nadal lepszy niż nic, więc ..

Nadzieja to pomaga ...

+1

Jest to funkcjonalny Test na prawdziwym przeglądarce tak trzeba wchodzić w interakcje z prawdziwym localStorage. Odpowiedź "localStorage nie jest twoim produktem" dotyczy tylko testów jednostkowych. – WildService

27

Innym potencjalnym rozwiązaniem jest umieszczenie dowolnego stanu rozliczeń w afterEach, który będzie realizowany po każdy test jest prowadzony: (patrz https://github.com/angular/protractor/issues/188)

afterEach(function() { 
    browser.executeScript('window.sessionStorage.clear();'); 
    browser.executeScript('window.localStorage.clear();'); 
}); 
+3

'Nie można odczytać właściwości 'sessionStorage' z 'okna': Pamięć masowa jest wyłączona w 'data:' URLs.' –

+6

Upewnij się, że trafiłeś na stronę w przeglądarce przed zakończeniem testu, w przeciwnym razie możesz to zrobić w przeglądarkach Chrome. Zobacz http://stackoverflow.com/questions/21259235/remove-an-item-from-localstorage-in-a-protractor-test, aby uzyskać więcej informacji. –

+1

dziękuję, to wyjaśnia, dlaczego nie działało, gdy używa go w przeszłości, zanim dotrze do phantomJS – sam

11

To dlatego, że nie masz przejdź do prawidłowego adresu URL. Wykonaj procedurę browser.get('/foo') przed próbą interakcji z obiektami strony, takimi jak localStorage.

3

Rozwiązałem ten problem, sprawdzając window.location przed próbą wyczyszczenia/modyfikacji sessionStorage lub localStorage.

Jeśli strona nie została załadowana, wówczas window.location.hostname będzie równa pustemu ciągowi ''. Jeśli więc otrzymasz pustą ścieżkę, nie próbuj wchodzić w interakcję z sessionStorage lub localStorage.

Oto trochę kodu (ES6), którego użyłem w moim zestawie kątomierza, aby zapobiec temu błędowi. Zauważ, że jest to ogórek-js Po funkcji, ale wciąż jest wykonany z kątomierz w Chrome, a to pokazuje, co trzeba zrobić, aby uniknąć tego błędu:

this.After(function(scenario) { 

    function getWindowLocation() { 
    return window.location; 
    } 

    function clearStorage() { 
    window.sessionStorage.clear(); 
    window.localStorage.clear(); 
    } 

    return browser.executeScript(getWindowLocation).then(function(location) { 
    // NB If no page is loaded in the scneario then calling clearStorage will cause exception 
    // so guard against this by checking hostname (If no page loaded then hostname == '') 
    if (location.hostname.length > 0) { 
     return browser.executeScript(clearStorage); 
    } 
    else { 
     return Promise.resolve(); 
    } 
    }); 
});