Jest 是一个非常流行的 JavaScript 测试框架,它提供了许多有用的工具来编写和运行测试。其中一个特别有用的功能是 Matchers,它让你可以编写自己的匹配器来扩展 Jest 的默认匹配器。本文将介绍如何使用 Jest 的自定义 Matchers 功能并提供一个具体的示例。
Matchers 概述
Matchers 是 Jest 用来检查测试结果的函数,它们可以用来比较值、类型、对象等等。例如,通常我们可能会使用以下代码来判断两个值是否相等:
test('两个数相等', () => { expect(2 + 2).toBe(4); });
在这个例子中,我们使用了 Jest 的 toBe
Matcher 将表达式 2 + 2
的结果和数字 4
进行比较。Jest 包含了很多内置的 Matchers,例如:
toBe
:检查值是否严格相等toEqual
:检查值是否深度相等toBeTruthy
:检查值是否可以转换为true
toBeFalsy
:检查值是否可以转换为false
toBeGreaterThan
:检查数字是否大于指定数字toBeLessThan
:检查数字是否小于指定数字
如果使用这些内置 Matchers 无法满足我们的需求,那么可以考虑编写自定义 Matchers。
编写自定义 Matchers
编写自定义 Matchers 需要遵循以下几个步骤:
- 命名:自定义 Matchers 应该以
to
开头,例如toBeAwesome
。 - 函数签名:自定义 Matchers 应该是一个函数,它的第一个参数是被测试的值,接下来可以有任意数量的参数。
- 返回值:自定义 Matchers 应该返回一个对象,它应该包含
pass
属性,表示测试是否成功,并且可以包含message
属性,表示失败时的错误信息。
在本文的示例中,我们将创建一个自定义 Matcher,用来检查两个对象是否包含相同的键值对。我们将命名这个 Matcher 为 toIncludePairs
,用法如下:
test('对象包含相同的键值对', () => { expect({ foo: 1, bar: 2 }).toIncludePairs({ foo: 1, bar: 2 }); });
示例代码
以下是实现 toIncludePairs
的示例代码:
-- -------------------- ---- ------- --------------- ------------------------ --------- - ----- ------------- - ------------------------- ----- ------------- - ------------------------- ----- ---- - -------------------------- ------- -- --------------------------------- --------------- -- ----------- --- --- -- ------------- --- ----- - -- -- ------ - ------ - -------- -- -- --------- ----------- --- -- ------- ------------- ----- ----- -- - ---- - ------ - -------- -- -- --------- ----------- -- ------- ------------- ----- ------ -- - -- ---
这个自定义 Matcher 接受两个对象作为参数,received
表示被测试的值,expected
表示期望值。它会将 received
和 expected
分别转换为键值对数组,然后运用一些条件来检查两个数组中是否包含相同的键值对。
在检查完成后,Matcher 返回一个对象,其中 pass
表示测试结果是否成功,message
是一个函数,用于生成错误信息。
使用自定义 Matchers
一旦编写好自定义 Matcher,我们就可以在测试中使用它了。在使用时,我们只需像使用内置 Matchers 一样使用它即可,例如:
test('对象包含相同的键值对', () => { expect({ foo: 1, bar: 2 }).toIncludePairs({ foo: 1, bar: 2 }); });
如果测试失败,Jest 会在控制台输出错误信息。
总结
到这里,我们已经了解了 Jest 的自定义 Matchers 功能并编写了一个自定义 Matcher 的示例代码。自定义 Matcher 非常有用,它可以让我们更好地定制测试,同时也可以提高测试的可读性和可维护性。如果你在自己的项目中使用 Jest,那么不妨考虑编写一些自定义 Matchers 来辅助测试。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64642765968c7c53b050b8d4