嘲笑日延长

2024-02-11

在我需要测试的代码中我使用

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);

dayjs().add(15, 'minute')

在我的测试中,我需要模拟 dayjs,以便在比较快照时始终具有相同的日期jest所以我做了

jest.mock('dayjs', () =>
  jest.fn((...args) =>
    jest.requireActual('dayjs')(
      args.filter((arg) => arg).length > 0 ? args : '2020-08-12'
    )
  )
);

它失败了

TypeError: _dayjs.default.extend is not a function

不幸的是,这里的类似问题对我没有帮助。我怎样才能模拟这两个默认值dayjs但是也extend?


You could编写更彻底的手动模拟dayjs,一个具有extend方法,但随后您将测试耦合到第三方接口。“不要嘲笑你不拥有的东西”- 你最终将不得不重新创建越来越多的dayjs模拟中的接口,然后如果该接口发生变化,您的测试将继续通过,但是你的代码将会被破坏。或者,如果您决定切换到不同的时间库,则必须重写所有测试以手动模拟新界面。

相反,将时间视为一种依赖。在您自己的模块中拥有您自己的函数,该函数仅提供当前时间作为Date object:

export const howSoonIsNow = () => new Date();

然后,当您需要创建一个dayjs对象,这样做从那 (dayjs()相当于dayjs(new Date()) per the docs https://day.js.org/docs/en/parse/now):

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';

import { howSoonIsNow } from './path/to/noTimeLikeThePresent';

dayjs.extend(utc);

dayjs(howSoonIsNow()).add(15, 'minute');

现在,在您的测试中,您可以交换您实际拥有的东西,而不必干扰dayjs at all:

import { howSoonIsNow } from './path/to/noTimeLikeThePresent';

jest.mock('./path/to/noTimeLikeThePresent');

howSoonIsNow.mockReturnValue(new Date(2020, 8, 12));

现在如果有新版本dayjs如果改变的方式破坏了你对它的使用,你的测试就会失败并告诉你同样多的信息。或者如果您交换到不同的时间库(here's https://stackoverflow.com/a/67317078/3001761一个使用 Moment 的示例)您不必重写所有测试,因此您可以确信您已正确交换。

另外,FWIW 我一般不会评价快照测试 - 它只是成为更改检测,因不相关的更改而失败,并鼓励人们忽略测试结果并在出现任何失败时盲目地重新创建快照。测试基于行为你想从你的组件中看到。

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

嘲笑日延长 的相关文章

  • 使用 fadeIn() 时,jQuery“未捕获类型错误:未定义不是函数”;

    我是 JS 新手 正在编写一个基本的富含 jQuery 的网页 其中同一文档中的每个页面都具有淡入 淡出功能 使用具有单独 ID 的相同 div 元素 无论如何 当我尝试淡入当前页面时 我收到错误 未捕获的类型错误 未定义不是函数 我在网上
  • 通过单击堆叠条形图打开选项卡

    我正在使用 R 构建一个包含转发的堆积条形图 ggplot and plotly 如果单击条形图的一部分 我希望打开一个新的浏览器选项卡并显示该特定日期的推文以及指定的转发量 但是 当我单击下面示例中的其中一个栏时 会打开一个不同的链接 表
  • 获取语​​音通道的用户数

    我正在重写我的音乐部分朋友不和谐机器人 https top gg bot 629799045954797609 我试图弄清楚如何获取执行命令的人的语音通道中的用户数量 我到处都找过 但似乎找不到它或它的用法 现在我正在使用以下内容 modu
  • 在 JavaScript 中解析日期时间字符串

    有谁知道如何解析所需格式的日期字符串dd mm yyyy See Mozilla Core JavaScript 参考 日期对象 https developer mozilla org en Core JavaScript 1 5 Refe
  • 如何在D3节点中放置图像?

    到目前为止 我已经创建了这些 D3 节点 用于创建可折叠的层次树 到目前为止 这些节点的颜色为 AA1C1C 深红色 以表明如果您单击它们 它们将扩展到更多节点 我想要做的是在节点中使用图像中的位置 这对于所有用户来说都是一个加号 以知道它
  • 在选择下拉列表中选择特定选项时添加输入框

    我需要在选择选项时将输入添加到选择选项中 每当用户选择 其他 时 就会出现一个输入框供用户输入数据 HTML
  • 单击元素外部时触发事件的指令

    我知道有很多问题都在问类似的事情 但没有人真正解决我的问题 我正在尝试构建一个指令 当鼠标单击当前元素外部时 该指令将执行表达式 为什么我需要这个功能 我正在构建一个应用程序 在这个应用程序中 有 3 个下拉菜单 5 个下拉列表 如选择的
  • 添加数组的总和。显示1个输出

    更新 这个问题的答案如下 感谢在不同线程上进行的 dougtesting 将数组相加 显示总和 https stackoverflow com questions 45724641 add array together display su
  • 获取 Firebase AngularFire 中项目的索引 ID

    这里提出了类似的问题 但接受的答案并没有真正回答这个问题 使用 AngularFire 是否可以创建关系型数据库 或者访问 UniqueID https stackoverflow com questions 16879484 using
  • PHP:在执行 php 脚本时显示“正在加载”页面

    这就是我现在所拥有的 我有一个网页 当访问该网页时 它会通过开放 API 连接到 Surveygizmo com 检索大量数据 然后将这些数据返回给我进行处理 此过程大约需要 10 12 秒 在执行时 页面只是处于 正在加载 状态 并且我会
  • 使用Doctype让scrollTop返回0,为什么?

    当我将此 Doctype 放入我的文档中时document body scrollTop返回零 这是为什么 当您使用该 Doctype 时 您会将每个当前浏览器放入所谓的几乎标准模式 http hsivonen iki fi doctype
  • 使用 System.js 导入 Typescript 编译的模块时出错

    我最近正在学习使用 system js 导入由 Typescript 编译的模块 这些模块之前是为 require js 编译的 并且工作正常 但是合并到system js时 应用时无法导入模块系统生产 js 控制台说 Uncaught i
  • 如何使 Meteor 上的服务器可以访问文本文件

    我很惊讶我无法在这里搜索我的答案 似乎没有其他人遇到这个问题 当您运行meteor服务时 js html等被打包在 meteor local build文件夹中 但它似乎排除了不是js或html的内容 我有一个名为 magicsets 的文
  • bootstrap-datetimepicker 仅显示日期

    我正在用这个repo https github com smalot bootstrap datetimepicker由 smalot 提供 我只想选择并显示日期 对于其他一些地方 我显示数据和时间 因此选择此存储库 我可以设法仅使用它来选
  • 在 Mobile Safari 中点击

    敲击
  • Twitter 引导选项卡和 JavaScript 事件

    我正在一个项目中使用 twitter bootstrap 特别是它的选项卡功能 http twitter github com bootstrap javascript html tabs http twitter github com b
  • 如何选中表格中输入文本焦点上的复选框

    我试图在输入文本焦点上检查表 DOM 中的复选框 但无法访问复选框元素 但我的焦点正在工作 这是我的 jsfiddle 链接https jsfiddle net 9qha9vft https jsfiddle net 9qha9vft 这是
  • 如何使用 jquery 生成并附加随机字符串

    一般性 我想使用 jQuery 或 javascript 将随机字符串附加到元素的属性 规格 我需要引用 CDN 上的 CSS 文件 不幸的是 每次更新该 CSS 文件时 CDN 都会更改该文件的 URL 所以我不能简单地引用静态 URL
  • TypeScript 中 C# 类虚拟成员的等效项

    因此 在 C 中 当我创建模型类和延迟加载内容时 我会执行以下操作 public int User ID get set public int Dept ID get set 然后在我的班级稍远一点的地方 我像这样弹出我的虚拟 public
  • 在 Angular 中导入和使用 lodash 的正确方法

    我曾经能够通过如下所示的 import 语句在 Angular 中使用 lodash 方法 import debounce as debounce from lodash 我现在在使用该语句时收到以下错误 node modules type

随机推荐

  • 无法构建 protobuf 去端点

    使用protobuf版本2 6 1 我通过自制程序安装 我正在尝试跑步 protoc go out cloud proto 我不断收到此错误 protoc gen go program not found or is not executa
  • Lollipop 及以上版本的仪器测试“未找到测试”

    我的基于仪器 浓缩咖啡 的测试无法在 Lollipop 设备和模拟器上运行 它们可以在任何其他平台上正确运行 我和这个帖子里的人有同样的症状https groups google com forum fromgroups topic adt
  • PHP 中的闭包……它们到底是什么以及什么时候需要使用它们?

    所以我正在以一种良好的 最新的 面向对象的方式进行编程 我经常使用 PHP 实现的 OOP 的各个方面 但我想知道什么时候可能需要使用闭包 有没有专家可以阐明何时实施闭包有用 PHP 将在 5 3 中原生支持闭包 当您想要一个仅用于某些小型
  • 使用索引合并 Javascript 数组

    我正在尝试使用索引合并 2 个 javascript 数组 假设我有数组A with A 0 1 A 1 9 A 5 12 和数组B with B 0 5 garbage unused B 6 23 B 7 99 B 8 31 B 10 9
  • 元素类型“Iterable”无法分配给列表类型“Widget”

    我正在使用 sqlite 制作一个应用程序 当我尝试将数据放入小部件中时 出现错误 我正在遵循一个教程 它给了我这个错误 元素类型 Iterable 无法分配给列表类型 Widget FutureBuilder
  • 如何用C++编写3D映射?

    你能告诉我如何编写多维地图吗 对于二维地图 我做了以下操作 map
  • 仅绘制热图的上/下三角形

    In maptplotlib one can create a heatmap representation of a correlation matrix using the imshow function By definition s
  • Apache Camel:带有聚合的多播 - AggregationStrategy 调用过于频繁

    对于多播 聚合 我有以下奇怪的 或者至少对我来说不清楚 行为 考虑以下路线 from direct multicaster multicast to direct A direct B aggregationStrategy new Agg
  • 如何调试通过 Assembly.Load(byte[]) 加载的程序集?

    我正在为使用加载插件 DLL 的产品创建一个插件Assembly Load byte 这一切都很好 但这意味着我没有传统的方法来加载调试符号来单步调试我的代码 疯狂的是 几个月前我遇到了完全相同的问题并解决了它 天哪 我为自己感到骄傲 所以
  • Javascript 无法在 Phonegap 和 jQuery Mobile 中的第二个 html 文件中工作

    我正在开发 Phonegap jQuery 移动 Android 应用程序 该应用程序从默认的 index html 页面开始 在其中我使用 mobile changePage 加载 demo html 文件 demo html 已正确加载
  • 如何确保不会重复访问我的主 STA COM 服务器 (C++)?

    好吧 我怀疑我什至很难用语言来表达这一点 因为我对 COM 和公寓的理解并不真正适合这项工作 我有一个 COM 进程内服务器 组件 C 它包装了一些遗留代码 由于此遗留代码的限制 我需要确保 COM 组件的方法是 仅在单个线程上调用 对于服
  • Django mptt,扩展“base.html”

    在base html中 div div
  • 检查当前时间是否在给定的时间间隔内,GOLANG

    我试图找到一种方法来检查当前时间是否在给定的时间间隔内 其中开始和结束是由用户 最终 给出的 在确保所有时间均采用 UTC 格式后 我一直在尝试使用 Time 包中的 After 和 Before 但显然我做错了什么 该代码看起来与此示例类
  • Java Spring REST API CORS 不适用于 Chrome 中通过 jQuery 的 DELETE 请求

    我正在创建一个使用 jQuery 编写的 Web 前端 它将 REST 请求发送到使用 Spring 框架用 Java 编写的 REST Web 服务 我遇到了 CORS 请求的奇怪错误 特别是 如果我使用 Safari 则一切正常 相反
  • 我们如何访问堆栈变量而不弹出它们?

    据我所知 C 中有两种变量 栈变量和堆变量 堆栈变量速度很快 并由编译器和 CPU 自动管理 我关于堆栈变量的问题是 堆栈变量真的存储在堆栈 FILO 数据结构中吗 如果是这样 为什么我们可以使用它们而不弹出它们并丢失它们的值 为什么要用栈
  • DidSelectRow 方法由于 tapGestureRecognizer 而被禁用

    我正在 swift 3 0 中开发一个项目 我有 UIViewController 来填充一些文本字段 因此 我使用表视图作为下拉菜单 一旦选择一行 它将被分配给 UILabel 此外 我还添加了 UITapGuestureRecogniz
  • 获取数组中第一个条目的指针

    我想获取数组中第一个条目的指针 这就是我尝试的方法 int Results 1 2 3 4 5 unsafe int FirstResult Results 0 得到以下编译错误 有什么想法如何修复它吗 您只能获取 a 中不固定表达式的地址
  • DebugBreak 不中断

    我正在用 C 编写一个类 但无法使用 F5 进行调试 该代码将从另一个调用它的 服务 运行 过去我用过 debugbreak 当我看到一个窗口告诉我抛出异常时 选择对其进行调试 最近我更新到了Windows 7 它一直工作了一段时间 今天
  • Android 8.0 中的 HTTP Volley 标头

    自从 Android 8 0 发布以来 我遇到了授权标头的问题 还有其他方法可以将标头添加到 Volley 请求中吗 这在最新的 Android 版本上无法正常工作 override public Map
  • 嘲笑日延长

    在我需要测试的代码中我使用 import dayjs from dayjs import utc from dayjs plugin utc dayjs extend utc dayjs add 15 minute 在我的测试中 我需要模拟