首页 > 解决方案 > 开玩笑地模拟 localStorage 方法

问题描述

我想开玩笑地模拟 localStorage 方法以进行错误模拟。我在utility.js 中定义了localstorage getter 和setter 方法。我想模拟在被调用localStorage.setItem时抛出错误。utility.setItem

//file: utility.js
export default {
  getItem(key) {
    return localStorage.getItem(key);
  },
  setItem(key, value) {
    localStorage.setItem(key, value);
  }
};

开玩笑,

test('throw error', () => {
  localStorage.setItem = jest.fn(() => {
    console.log(" called ");
    throw new Error('ERROR');
  });

  utility.setItem('123', 'value');
});

然而localStorage.setItem,模拟永远不会被调用。我也试过做

window.localStorage.setItem = jest.genMockFunction(()=>{console.log(" Mock Called")});
global.localStorage.setItem = jest.fn(()=>{console.log(" Mock Called")});

标签: javascriptreactjslocal-storagejestjs

解决方案


jest.spyOn(window.localStorage.__proto__, 'setItem');完全不需要其他任何东西,如此处所述:https ://github.com/facebook/jest/issues/6798#issuecomment-440988627


推荐阅读