自从JSSm最新版本发布以来,我再也无法模拟localStorage
。
我尝试了以下方法:
Object.defineProperty(window, 'localStorage', {value: LocalStorageMock})
window.localStorage = LocalStorageMock;
jest.spyOn(window.localStorage, 'setItem')
所有这些方法都不适合我,我总是得到原始的localStorage
。
答案 0 :(得分:3)
在更新Jest时,我实际上遇到了相同的问题,不确定这是否发生在您身上,但是我在这里找到此修复程序: https://github.com/facebook/jest/issues/6766
从OlivierB-OB:
作为临时的解决方法,您可以将jsdom“ 11.11.0”(精确)安装为软件包中的开发依赖项。然后,jest-environment-jsdom应该使用此版本,而不是引起此问题的最新“ 11.12.0”。 干杯!
此后,我在测试设置中嘲笑了本地存储,间谍活动恢复了正常。
以及localstorage模拟的实现:https://github.com/facebook/jest/issues/2098 虽然缺少removeItem,所以您可能需要添加它。
答案 1 :(得分:2)
您可以使用通过npm提供的 dom-storage 软件包:
const Storage = require('dom-storage');
global.localStorage = new Storage(null, { strict: true });
global.sessionStorage = new Storage(null, { strict: true });
我们将jsdom
的最新版本用于单元测试,并且上述方法效果很好。
答案 2 :(得分:2)
setItemSpy = jest.spyOn(Storage.prototype, 'setItem');
对我有用。
在此处看到此修复程序:https://github.com/facebook/jest/issues/6858#issuecomment-413677180