AfterAll Uncaught TypeError: localStorage.removeItem не является брошенной функцией - PullRequest
1 голос
/ 19 марта 2020

Я новичок в Angular тестировании, поэтому я протестировал небольшие события и функции, но теперь работаю с поддельным localStorage, пока тестирую, я сталкиваюсь с проблемой localStorage.removeitem в каждом компоненте. Я погуглил эту проблему, но не смог найти наилучшего возможного решения. Может кто-нибудь помочь преодолеть эту проблему.

Вот так я издеваюсь над локальным хранилищем для тестирования.

let store = {''}; // i have localData here

    const mockLocalStorage = {
        getItem: (key: string): string => {
        return key in store ? store[key] : null;
        },
        setItem: (key: string, value: string) => {
        store[key] = `${value}`;
        },
        removeItem: (key: string) => {
        delete store[key];
        },
        clear: () => {
            this.store = {};
        }
    };

    spyOn(localStorage, 'getItem')
        .and.callFake(mockLocalStorage.getItem);
    spyOn(localStorage, 'setItem')
        .and.callFake(mockLocalStorage.setItem);
    // spyOn(localStorage, 'removeItem')
    //     .and.callFake(mockLocalStorage.removeItem);
    spyOn(localStorage, 'clear')
        .and.callFake(mockLocalStorage.clear);

1 Ответ

0 голосов
/ 19 марта 2020

Я не высмеиваю localStorage, поскольку он находится на объекте окна, и его реализация довольно проста. Насмешка может принести больше головной боли, чем необходимо.

Просто позвольте localStorage быть тем, что есть на window объекте, и если вы хотите, чтобы localStorage был свободным sh от теста к тесту, в afterAll крюк, до localStorage.clear();.

...