自定义 Jest 匹配器实现更灵活的断言

阅读时长 5 分钟读完

Jest 是一款流行的 JavaScript 测试框架,它提供了丰富的断言方法用于测试代码的正确性。但是有时候,我们可能需要自定义一些与业务相关的断言方法,这时候自定义 Jest 匹配器就派上用场了。

本文将介绍如何自定义 Jest 匹配器,实现更灵活的断言方法。

Jest 匹配器简介

Jest 的断言方法包括两种形式:

  • expect(value).toBe(expected):用于测试两个值是否相等。
  • expect(value).toMatch(pattern):用于测试一个字符串是否匹配一个正则表达式。

Jest 匹配器就是自定义的断言方法,它可以用于测试更加复杂的数据结构和业务逻辑。匹配器是一个函数,它接受一个实际值和一个可选的参数,如果函数返回 true,则认为测试通过,否则认为测试失败。

自定义 Jest 匹配器

要自定义 Jest 匹配器,可以通过调用 expect.extend() 方法来注册一个新的匹配器。

-- -------------------- ---- -------
---------------
  -------------------------------- --------- -
    ----- ---- - ------ -- ------ - -------- --- --
    -- ------ -
      ------ -
        -------- -- --
          --------- --------- --- -- -- ------ --- --------- -- -------------
        ----- -----
      --
    - ---- -
      ------ -
        -------- -- --
          --------- --------- -- -- ------ --- --------- -- -------------
        ----- ------
      --
    -
  --
---
展开代码

上面的例子是一个自定义的匹配器,它可以测试一个数值是否为真且能够被另一个数整除。该匹配器接受两个参数,一个是实际值,一个是期望值,它返回一个对象,其中包含 message 和 pass 两个属性。message 用于描述测试失败的情况,pass 用于表示测试是否通过。

在测试代码中调用该匹配器:

自定义匹配器中的参数验证

自定义匹配器的参数也可以进行验证。例子如下:

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

    ----- ---- - ------ - -------- --- --
    -- ------ -
      ------ -
        -------- -- --
          --------- --------- --- -- -- -------- -- -------------
        ----- -----
      --
    - ---- -
      ------ -
        -------- -- -- --------- --------- -- -- -------- -- -------------
        ----- ------
      --
    -
  --
---
展开代码

上面的例子中,toBeMultipleOf() 可以进行参数验证,如果参数不是数字类型,则会抛出异常。

自定义匹配器中使用 Jest 内置断言工具

在自定义匹配器中,有时候需要使用 Jest 内置的断言工具来帮助实现某些特定功能。可以通过调用 expect 函数来获取 Jest 内置的断言工具对象。

例子如下:

-- -------------------- ---- -------
---------------
  ------------------------ --------- -
    ----- ---- - ------------------ -- ----------------------------
    -- ------ -
      ------ -
        -------- -- -- --------- --------- --- -- ------- --- ----- -------------
        ----- -----
      --
    - ---- -
      ------ -
        -------- -- -- --------- --------- -- ------- --- ----- -------------
        ----- ------
      --
    -
  --
---
展开代码

上面的例子中,toContainAllKeys() 可以测试一个对象是否包含指定的所有属性。它使用了 Jest 内置的 hasOwnProperty() 方法来判断对象是否包含指定属性。

总结

自定义 Jest 匹配器可以让我们实现更加灵活的测试断言方法,从而更好地测试业务逻辑和数据结构。在自定义匹配器中,我们可以使用参数验证、Jest 内置断言工具等技术,实现各种特定的测试需求。

希望本文可以帮助你更好地掌握自定义 Jest 匹配器的技术。如果你想进一步学习 Jest 或者其他前端技术,请继续关注我们的博客。

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

纠错
反馈

纠错反馈