为 Jest 添加自定义的 Matchers 的方法详解

Jest 是前端领域常见的测试框架之一,它的优点在于易于上手、功能强大、灵活性高。在使用 Jest 进行测试的过程中,我们有时候会遇到需要检查特定值、特定状态的情况。Jest 提供了 Matchers 来实现这一需求,但是有时候默认的 Matchers 并不能满足我们的要求。那么,如何为 Jest 添加自定义的 Matchers 呢?

Matchers 概述

Matchers 是用来断言的工具。在在使用 Jest 进行测试的过程中,Matchers 通常是由 expect 函数调用来使用的。下面是一个使用 expect 函数的例子:

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

其中,expect(2 + 2) 中的 expect 函数通常表示这是一个待测试的值或者对象,而 toBe(4) 则表示期望结果是 4。

如果应用场景中没有提供预设的 Matcher,那么我们可以自定义 Matchers 来满足需求,而且 Matchers 可以用于任何有关要素的断言上。

自定义 Matchers 的方法

Jest 提供了 addMatchers 和 extend 方法用于添加自定义 Matcher。下面分别来介绍这两种方法。

addMatchers

使用 addMatchers 方法添加自定义 Matcher 的方式如下:

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

这里的 isOfType 方法是我们自定义的 Matcher。当我们使用这个 Matcher 时,可以直接调用 expect(value).isOfType(type)。比如:

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

这个例子中,我们使用的是 isOfType 自定义 Matcher,可以检查一个值是否为数组。如果期望的值满足条件,期望的 Matcher 就会 pass,否则 Matcher 就会 fail,返回指定的 message。

extend

如果你需要添加多个自定义 Matcher,你可以使用 extend 方法。extend 方法会修改 Jest 的默认 Matchers 对象,这会影响到所有 expect 的语句。

使用 extend 方法添加自定义 Matcher 的方式如下:

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

在这个例子中,我们添加了一个新的自定义 Matcher,名叫 hasLength,用于检查给定的值是否等于指定的长度。使用方式如下:

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

如果期望的字符串长度是 3,那么期望的 Matcher 就会 pass,否则就会 fail 返回指定的 message。

结论

现在你就可以使用 Jest 框架提供的 addMatchers 和 extend 方法来添加自定义的 Matchers 了。自定义 Matcher 的方法 对于特定测试场景可以很方便地增加我们的测试能力,强烈建议前端工程师们灵活运用起来。

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