JSDom 11.12.0 - 如何模拟localStorage?

问题描述 投票:5回答:3

自JSDom的最新版本发布以来,我无法再模拟localStorage了。

我尝试了以下方法:

  1. Object.defineProperty(window, 'localStorage', {value: LocalStorageMock})
  2. window.localStorage = LocalStorageMock;
  3. jest.spyOn(window.localStorage, 'setItem')

任何这些方法都不适合我,我总是得到原始的localStorage

javascript testing jsdom
3个回答
3
投票

我在更新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,所以你可能需要添加它。


3
投票

setItemSpy = jest.spyOn(Storage.prototype, 'setItem');为我工作。

在这里看到这个问题:https://github.com/facebook/jest/issues/6858#issuecomment-413677180


2
投票

您可以使用npm提供的dom-storage包:

const Storage = require('dom-storage');
global.localStorage = new Storage(null, { strict: true });
global.sessionStorage = new Storage(null, { strict: true });

我们使用最新版本的jsdom进行单元测试,上述方法效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.