在 Jest 中自定义匹配器 (matchers)

Jest 是一个流行的 JavaScript 测试框架,它允许你编写简洁、可维护的测试用例并查找代码中常见的错误。为了让测试更加清晰和易于阅读,Jest 中内置了多个匹配器(matchers),包括 equalTo、toBeGreaterThan、toBeLessThan 等。此外,你也可以自定义匹配器以满足特定的测试需求。

什么是自定义匹配器

自定义匹配器是一种允许你对测试用例进行拓展的机制,它允许你编写定制化的匹配逻辑。在 Jest 中,自定义匹配器包括两个部分:匹配器函数和匹配器名称。

匹配器函数是用来检查给定数据是否符合某种模式的函数。例如,以下匹配器函数可以用来检查一个字符串是否包含特定的子字符串:

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

在这个例子中,我们编写了一个名为 toContainText 的自定义匹配器函数,它接收两个参数:received 表示接收到的数据,expected 表示期望的数据。该函数返回一个对象,其中包含 pass 属性和 message 方法。pass 属性表示该数据是否符合期望的模式,而 message 方法是用来返回错误信息的回调函数。当 pass 属性为 true 时,Jest 会认为测试用例通过;当 pass 属性为 false 时,Jest 会认为测试用例失败。

匹配器名称是一个字符串,它用来标识你定义的自定义匹配器。在上面的例子中,我们定义了一个名为 toContainText 的自定义匹配器,它可以在测试用例中通过toMatch("text")方法来调用。匹配器名称应该尽量描述其功能,以方便其他开发人员理解你的编写的代码。

如何使用自定义匹配器

要在 Jest 中使用自定义匹配器,你需要将函数定义添加到全局匹配器对象中。在下面的示例中,我们将自定义截取文件名的匹配器添加到 Jest 的全局匹配器对象中:

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

在该示例中,我们定义了一个名为 toHaveFileName 的自定义匹配器,它接收两个参数:received 表示接收到的数据,fileName 表示期望的文件名。该匹配器的主要作用是从接收到的数据中截取文件名,并检查截取的文件名是否与期望的文件名一致。如果两者一致,该匹配器将返回一个 pass 属性为 true 的对象;如果两者不一致,该匹配器将返回一个 pass 属性为 false 的对象。使用该自定义匹配器的示例代码如下:

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

在上面的示例中,我们使用了 toHaveFileName 自定义匹配器检查接收到的数据是否包含字符串 'example.js'。

注意事项

在编写自定义匹配器时,有几个注意事项需要注意:

  1. 自定义匹配器中应该涵盖正常和异常情况,以便向开发者提供有关测试失败原因的详细错误信息。
  2. 您应该给自定义匹配器起一个好的名称,以便他人能够理解该匹配器的作用。
  3. 如果您发现需要在多个测试用例中使用相同的匹配器,您可以将其封装到一个单独的 JavaScript 模块中。在测试用例中引入该模块即可使用匹配器。

结论

Jest 中的自定义匹配器提供了一种简单而强大的机制,允许你编写定制的匹配逻辑来满足特定的测试需求。在编写自定义匹配器时,您应该确保涵盖正常和异常情况,并为其赋予一个描述性的名称。最后,您可以将自定义匹配器封装到一个单独的 JavaScript 模块中以便多个测试用例复用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67383d96317fbffedf0f0f32