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

2023-12-06

有没有可以模拟的库localStorage?

我一直在使用Sinon.JS对于我的大多数其他 javascript 模拟,我发现它真的很棒。

我的初步测试表明 localStorage 拒绝在 Firefox 中分配(sadface),所以我可能需要对此进行某种破解:/

目前我的选择(据我所知)如下:

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

您如何看待这些方法?您认为还有其他更好的方法吗?不管怎样,我都会把最终制作的“库”放在 github 上,以实现开源的目的。


这是用 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()上面显示的函数在测试的全局范围内(通常的位置是规范助手.js脚本)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JavaScript 单元测试中模拟 localStorage? 的相关文章

随机推荐

  • 通过字符串从 C# 动态对象获取属性值(反射?)

    想象一下我有一个动态变量 dynamic d something 现在 我为d另一方面 我从字符串数组中得到 string strarray property1 property2 我事先不知道房产名称 如何在代码中一次d创建并从数据库中提
  • 将记事本++中某些标签之间的空格替换为逗号

    我正在尝试在记事本 中编写一个正则表达式 它获取两个标签之间包含的所有空格并用逗号替换它们 基本上 如果我有这个输入
  • MySQL默认值问题

    在 MySQL 中 整数字段的默认值为 0 在插入过程中 该字段的值为 NULL 并且 NULL 被插入 我使用该字段的值进行一些算术运算 例如加法 乘法 除法 这会导致错误 因为插入了 NULL 如何解决这个问题 如果整数 小数等字段的插
  • 将自定义滤镜应用于相机输出

    如何将自定义滤镜应用于相机输出中的单个帧并显示它们 到目前为止我尝试过的 mCamera setPreviewCallback new CameraGreenFilter public class CameraGreenFilter imp
  • C# 使用正则表达式删除行,包括换行符

    我需要从某些文本中删除与特定模式匹配的行 一种方法是使用带有开始 结束锚点的正则表达式 如下所示 var re new Regex pattern RegexOptions Multiline string final re Replace
  • Stroustrup 的 PPP 书中有关多边形的问题

    我阅读了 Stroustrup 的 使用 C 进行编程原理和实践 一书 在第12章和第441页中有这样的代码 This is example code from Chapter 12 3 A first example of Program
  • Scala DSL - 引用父级的嵌套块

    在 Scala 中使用 DSL 假设我有这样的东西 house floor bedroom kids bedroom master floor kitchen 现在我想要的是在每个嵌套块中都有一个引用或引用封闭块上的函数 例如 效果是地板被
  • SQL Azure:在 SSMS 2008 R2 中编写对象脚本时出现 SMO 异常

    我正在使用 SQL Server Management Studio 2008 R2 来管理 SQL Azure 数据库 当我尝试右键单击数据库中的任何对象 然后执行 脚本表为 gt 创建 gt 新建查询编辑器窗口 时 我每次都会收到以下异
  • 使用 ASP .NET Core Identity 和 EntityFrameworkCore 注册新用户时出现 InvalidOperationException

    我正在关注使用身份的文档并尝试注册一个新用户 执行注册操作 但失败并出现以下错误 InvalidOperationException 无法为 ApplicationUser 创建 DbSet 因为该类型不包含在上下文的模型中 Startup
  • 在 C# 中使用 RSA 加密并在 Java 中使用解密时出现填充错误

    目前 当我使用 Java 解密 C 中生成的 Base64 编码的 RSA 加密字符串时 收到以下错误 javax crypto BadPaddingException 不是 PKCS 1 块类型 2 或零填充 NET 和 Java 交换之
  • 为什么 RTC 中没有显示我的待处理更改?

    场景 我刚刚连接到流 并创建了一个新的存储库工作区 我加载了它的两个组件 并修改了一些代码 如果我打开 挂起的更改 视图 我在那里看不到任何挂起的更改 并且选择了 显示完整视图 因此我应该看到传入 传出和挂起的更改集 我的文件已保存 我可以
  • Python + Flask + Discord:如何通过 Flask 端点通过 Discord 发送消息?

    我正在尝试发送一条不和谐的消息 通过 Flask 端点激活 当我打电话时 我收到以下错误消息http 127 0 0 1 5000 send RuntimeError There is no current event loop in th
  • 困惑如何在 C++ 中使用 strtod() 从字符串转换为双精度

    如果有人能解释如何使用该功能 那就太好了 看不懂参数 Thanks 第一个参数是指向字符的指针 c str 为您提供来自字符串对象的指针 第二个参数是可选的 它将包含一个指向字符串中数值之后的下一个字符的指针 看http www cplus
  • 展开详细信息/摘要时滚动到锚点?

    我有一大堆堆叠的 div 其中包含id锚点和嵌入视频包裹在details and summary标签 是否可以同时扩展details并滚动到其id只需单击一下 如果我使用下面的脚本 我可以滚动到一个锚点a tag JS document r
  • 如何将绑定错误转化为运行时异常?

    正如我们的项目中设置了 将警告视为错误 以捕获早期可能的问题一样 我希望有一个运行时异常来尽早捕获它们 我最近被这个问题困扰了 我很高兴能有这个 能做到吗 如果是的话 怎么办 你可以挂入PresentationTraceSources与您自
  • 从数据框中删除百分比

    我有一个源自 Excel 文件的数据框 它在列上方有常见的标题 但有些列中有 符号 我想删除它们 搜索 stackoverflow 给出了一些很好的代码 用于从矩阵中删除百分比 有什么方法可以编辑 R 中矩阵中的值吗 当我尝试将其应用到我的
  • 如何在 Angular 中初始化 Firebase App Check

    我想知道如何使用 Angular 初始化 firebase 应用程序检查 我正在使用 Angular Fire 但我不确定如何在使用任何服务之前初始化 Firebase 应用程序检查 文档有这个 在访问任何 Firebase 服务之前 将以
  • 如何清除 Windows Phone 8 上 Cordova Web View 的缓存?

    我正在为 Windows Phone 8 开发 Cordova 2 9 0 应用程序 该应用程序大量使用外部内容 使用从其他来源提供的 JS 和 HTML 内容 一切正常 但浏览器组件缓存严重 我发现清除缓存的唯一方法是卸载并再次安装该应用
  • Xcode 4.4 有 subversion 吗?

    我刚刚下载了 Xcode 4 4 与它的前身不同 没有安装程序 只有一个 app 颠覆潜伏在某处吗 里面有目录吗 app我可以添加到PATH恢复我所有的命令行工具 从 XCode 首选项安装命令行工具 一切都会恢复正常
  • 如何在 JavaScript 单元测试中模拟 localStorage?

    有没有可以模拟的库localStorage 我一直在使用Sinon JS对于我的大多数其他 javascript 模拟 我发现它真的很棒 我的初步测试表明 localStorage 拒绝在 Firefox 中分配 sadface 所以我可能