如何在 JavaScript 单元测试中模拟 localStorage?

新手上路,请多包涵

是否有任何库可以模拟 localStorage

我一直在使用 Sinon.JS 进行我的大部分其他 javascript 模拟,并且发现它真的很棒。

我的初始测试表明 localStorage 拒绝在 firefox (sadface) 中分配,所以我可能需要一些技巧来解决这个问题:/

我现在的选择(如我所见)如下:

  1. 创建我所有代码都使用的包装函数并模拟它们
  2. 为 localStorage 创建某种(可能很复杂)状态管理(测试前的 localStorage 快照,清理恢复快照)。
  3. ??????

您如何看待这些方法?您认为还有其他更好的方法吗?无论哪种方式,我都会将我最终制作的结果“库”放在 github 上以实现开源。

原文由 anthony sottile 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 439
1 个回答

这是使用 Jasmine 模拟它的简单方法:

 let localStore;

beforeEach(() => {
  localStore = {};

  spyOn(window.localStorage, 'getItem').and.callFake((key) =>
    key in localStore ? localStore[key] : null
  );
  spyOn(window.localStorage, 'setItem').and.callFake(
    (key, value) => (localStore[key] = value + '')
  );
  spyOn(window.localStorage, 'clear').and.callFake(() => (localStore = {}));
});

如果您想在所有测试中模拟本地存储,请在测试的全局范围内声明上面显示的 beforeEach() 函数(通常的位置是 specHelper.js 脚本)。

原文由 Andreas Köberle 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题