如何在 Jest 中使用自定义 Matchers

阅读时长 4 分钟读完

Jest 是一个非常流行的 JavaScript 测试框架,它提供了许多有用的工具来编写和运行测试。其中一个特别有用的功能是 Matchers,它让你可以编写自己的匹配器来扩展 Jest 的默认匹配器。本文将介绍如何使用 Jest 的自定义 Matchers 功能并提供一个具体的示例。

Matchers 概述

Matchers 是 Jest 用来检查测试结果的函数,它们可以用来比较值、类型、对象等等。例如,通常我们可能会使用以下代码来判断两个值是否相等:

在这个例子中,我们使用了 Jest 的 toBe Matcher 将表达式 2 + 2 的结果和数字 4 进行比较。Jest 包含了很多内置的 Matchers,例如:

  • toBe:检查值是否严格相等
  • toEqual:检查值是否深度相等
  • toBeTruthy:检查值是否可以转换为 true
  • toBeFalsy:检查值是否可以转换为 false
  • toBeGreaterThan:检查数字是否大于指定数字
  • toBeLessThan:检查数字是否小于指定数字

如果使用这些内置 Matchers 无法满足我们的需求,那么可以考虑编写自定义 Matchers。

编写自定义 Matchers

编写自定义 Matchers 需要遵循以下几个步骤:

  1. 命名:自定义 Matchers 应该以 to 开头,例如 toBeAwesome
  2. 函数签名:自定义 Matchers 应该是一个函数,它的第一个参数是被测试的值,接下来可以有任意数量的参数。
  3. 返回值:自定义 Matchers 应该返回一个对象,它应该包含 pass 属性,表示测试是否成功,并且可以包含 message 属性,表示失败时的错误信息。

在本文的示例中,我们将创建一个自定义 Matcher,用来检查两个对象是否包含相同的键值对。我们将命名这个 Matcher 为 toIncludePairs,用法如下:

示例代码

以下是实现 toIncludePairs 的示例代码:

-- -------------------- ---- -------
---------------
  ------------------------ --------- -
    ----- ------------- - -------------------------
    ----- ------------- - -------------------------
  
    ----- ---- - -------------------------- ------- --
      --------------------------------- --------------- --
        ----------- --- --- --
        ------------- --- -----
      -
    --
  
    -- ------ -
      ------ -
        -------- -- -- --------- ----------- --- -- ------- -------------
        ----- -----
      --
    - ---- -
      ------ -
        -------- -- -- --------- ----------- -- ------- -------------
        ----- ------
      --
    -
  --
---

这个自定义 Matcher 接受两个对象作为参数,received 表示被测试的值,expected 表示期望值。它会将 receivedexpected 分别转换为键值对数组,然后运用一些条件来检查两个数组中是否包含相同的键值对。

在检查完成后,Matcher 返回一个对象,其中 pass 表示测试结果是否成功,message 是一个函数,用于生成错误信息。

使用自定义 Matchers

一旦编写好自定义 Matcher,我们就可以在测试中使用它了。在使用时,我们只需像使用内置 Matchers 一样使用它即可,例如:

如果测试失败,Jest 会在控制台输出错误信息。

总结

到这里,我们已经了解了 Jest 的自定义 Matchers 功能并编写了一个自定义 Matcher 的示例代码。自定义 Matcher 非常有用,它可以让我们更好地定制测试,同时也可以提高测试的可读性和可维护性。如果你在自己的项目中使用 Jest,那么不妨考虑编写一些自定义 Matchers 来辅助测试。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64642765968c7c53b050b8d4

纠错
反馈