头图

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

JerryWang_汪子熙

副标题: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的原创文章,尽在:"汪子熙":

阅读 178

Jerry Wang的SAP技术专栏
SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使

Jerry 2007年从电子科技大学计算机专业硕士毕业后进入SAP成都研究院工作至今, SAP社区导师,SAP中国技术...

755 声望
1k 粉丝
0 条评论

Jerry 2007年从电子科技大学计算机专业硕士毕业后进入SAP成都研究院工作至今, SAP社区导师,SAP中国技术...

755 声望
1k 粉丝
文章目录
宣传栏