Javascript 毕竟未捕获的TypeError:localStorage.removeItem不是引发的函数

Javascript 毕竟未捕获的TypeError:localStorage.removeItem不是引发的函数,javascript,angular,testing,jasmine,karma-runner,Javascript,Angular,Testing,Jasmine,Karma Runner,我不熟悉角度测试,所以我测试过小事件和函数,但现在在测试时使用假本地存储,我在每个组件中都面临这个问题localStorage.removietem。我在谷歌上搜索了这个问题,但没有找到最好的解决方案。谁能帮助克服这个问题呢 这就是我模拟本地存储进行测试的方式 let store = {''}; // i have localData here const mockLocalStorage = { getItem: (key: string): string =>

我不熟悉角度测试,所以我测试过小事件和函数,但现在在测试时使用假本地存储,我在每个组件中都面临这个问题
localStorage.removietem
。我在谷歌上搜索了这个问题,但没有找到最好的解决方案。谁能帮助克服这个问题呢

这就是我模拟本地存储进行测试的方式

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);

我不会模拟
localStorage
,因为它位于窗口对象上,并且它的实现非常简单。嘲笑它可能会带来比需要更多的头痛


只需让
localStorage
成为
窗口上的对象,如果您想让
localStorage
从一个测试到另一个测试都是新鲜的,那么在
之后的
钩子中,执行
localStorage.clear()

我不模拟
localStorage
,因为它位于window对象上,实现起来非常简单。嘲笑它可能会带来比需要更多的头痛


只需让
localStorage
成为
窗口上的对象,如果您想让
localStorage
从一个测试到另一个测试都是新鲜的,那么在
之后的
钩子中,执行
localStorage.clear()

是,但这将删除所有项目。我的观点是,不要模仿
localStorage
,在测试中正确使用它,一旦你在套件中使用完它,在
之后的
钩子中,执行
localStorage.clear()
,这样你就可以重新开始其他测试了。是的,但这将删除所有项目。我的观点是,不要模仿
localStorage
,在测试中正确地使用它,一旦在套件中使用完它,在
钩子中,执行
localStorage.clear()
,这样您就可以重新开始其他测试了。