自JSDom的最新版本发布以来,我无法再模拟localStorage
了。
我尝试了以下方法:
Object.defineProperty(window, 'localStorage', {value: LocalStorageMock})
window.localStorage = LocalStorageMock;
jest.spyOn(window.localStorage, 'setItem')
任何这些方法都不适合我,我总是得到原始的localStorage
。
我在更新Jest时遇到了同样的问题,不确定是不是发生了什么事,但我在这里发现了这个问题:https://github.com/facebook/jest/issues/6766
来自OlivierB-OB:
作为临时解决方法,您可以在程序包中安装jsdom“11.11.0”(确切)作为dev-dependency。然后jest-environment-jsdom应该使用这个版本而不是最新的“11.12.0”导致行为。干杯!
之后,我在测试设置中嘲笑localstorage并且间谍恢复正常。
而且localstorage mock的实现:https://github.com/facebook/jest/issues/2098缺少removeItem,所以你可能需要添加它。
setItemSpy = jest.spyOn(Storage.prototype, 'setItem');
为我工作。
在这里看到这个问题:https://github.com/facebook/jest/issues/6858#issuecomment-413677180
您可以使用npm提供的dom-storage包:
const Storage = require('dom-storage');
global.localStorage = new Storage(null, { strict: true });
global.sessionStorage = new Storage(null, { strict: true });
我们使用最新版本的jsdom
进行单元测试,上述方法效果很好。