JSSM 11.12.0-如何模拟localStorage?

时间:2018-07-28 08:27:04

标签: javascript testing jsdom

自从JSSm最新版本发布以来,我再也无法模拟localStorage

我尝试了以下方法:

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

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

3 个答案:

答案 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