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()
,这样您就可以重新开始其他测试了。