头图

Jest 测试框架 expect 和 匹配器 matcher 的设计原理解析

副标题:SAP Spartacus SSR 优化的单元测试分析之二 - 调用参数检测
源代码:

 it(`should pass parameters to the original engine instance`, () => {
      expect(originalEngineInstance).toHaveBeenCalledWith(
        mockPath,
        mockOptions,
        mockCallback
      );
    });

注意观察 jest.Expect 的返回值:类型为 jest.JestMatchersShape

单步调试 expect 的调用过程:

从注释看,该函数为 spec 创建一个 expectation, 传入的 actual 为 spy 之后的版本。

构造一个 expectation,需要以上的参数。

紧接着调用 toHaveBeenCalledWith:

支持的所有方法,在 Chrome 开发者工具里能够看到:

toHaveBeenCalledWith

执行到这里来了:

所有可用的匹配器 matchers,都定义在文件 jasmine.js 里:

因此,toHaveBeenCalledWith 也算匹配器 matchers 之一。

构造一个匹配器实例:

调用匹配器工厂,构造一个匹配器实例:

其实例的运行代码如下图所示:

比较实际被调用的参数,是否和期望被调用的参数完全一致。

进入数组的比较分支:

更多Jerry的原创文章,尽在:"汪子熙":


Jerry Wang的SAP技术专栏
SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使
884 声望
1.6k 粉丝
0 条评论
推荐阅读
什么是 sap.ushell.Container
sap.ushell.Container 是一个 SAP Fiori Launchpad 的 JavaScript API,它提供了访问 Launchpad 功能和服务的方法和属性。Container 对象由 SAP Fiori Launchpad 创建并提供给运行在 Fiori Launchpad 中的应用程...

JerryWang_汪子熙

封面图
ChatGPT 插件上线!亲测,更加便捷!
ChatGPT 正火的时候,还有很多人都在忙着搜教程,大家想亲自体验原汁原味的 ChatGPTt,可搜到的资源要不是很难用,或者无法科学上网,挺折腾的,现在终于不用那么麻烦了。

Postcat2阅读 240评论 4

别再说 AI 了,这个 API 管理工具悄悄开源了,快来看看
说到开源的 API 管理工具,大家可能很容易想到 Postman 的妹妹 Postwoman,如果你也喜欢开源产品,那接下来这个工具你可不能错过~

气势凌人的柿子2阅读 329

登上了 Github trending!这个 API 管理工具新秀厉害了!
昨天我在逛Github上的时候,无意发现我们的 Postcat ,居然登上了 Github trending !这个还是很厉害的!那种心情你们应该懂的吧,就是自己的工具,居然也被大家知道了,很开心!

Postcat2阅读 161

基于Spring Cache实现Caffeine、jimDB多级缓存实战
在早期参与涅槃氛围标签中台项目中,前台要求接口性能999要求50ms以下,通过设计Caffeine、ehcache堆外缓存、jimDB三级缓存,利用内存、堆外、jimDB缓存不同的特性提升接口性能, 内存缓存采用Caffeine缓存,利用...

京东云开发者2阅读 335

封面图
在京东如何做好前端系统的可观测性
作者:京东科技 王亚森前言本文旨在从0到1的讲述一下我们团队在做系统可观测性过程中所沉淀下来的一整套解决方案,收效甚巨,不敢苟藏,当公之于众,共建吾辈光明之未来。先讲一下我们从中得到的好处:1,当我所...

京东云开发者1阅读 135

封面图
真的很实用!一文搞懂Websocket 接口测试方法
WebSocket 是一种基于在单个 TCP 连接上进行全双工通信的协议,是从HTML5开始提供的一种浏览器与服务器之间进行全双工通讯的网络技术,解决了HTTP协议不适用于实时通信的缺点,相较于 HTTP 协议,WebSocket 协议...

气势凌人的柿子1阅读 227

884 声望
1.6k 粉丝
宣传栏