Jest 是一款流行的 JavaScript 测试框架,它提供了丰富的断言方法用于测试代码的正确性。但是有时候,我们可能需要自定义一些与业务相关的断言方法,这时候自定义 Jest 匹配器就派上用场了。
本文将介绍如何自定义 Jest 匹配器,实现更灵活的断言方法。
Jest 匹配器简介
Jest 的断言方法包括两种形式:
- expect(value).toBe(expected):用于测试两个值是否相等。
- expect(value).toMatch(pattern):用于测试一个字符串是否匹配一个正则表达式。
Jest 匹配器就是自定义的断言方法,它可以用于测试更加复杂的数据结构和业务逻辑。匹配器是一个函数,它接受一个实际值和一个可选的参数,如果函数返回 true,则认为测试通过,否则认为测试失败。
自定义 Jest 匹配器
要自定义 Jest 匹配器,可以通过调用 expect.extend()
方法来注册一个新的匹配器。
-- -------------------- ---- ------- --------------- -------------------------------- --------- - ----- ---- - ------ -- ------ - -------- --- -- -- ------ - ------ - -------- -- -- --------- --------- --- -- -- ------ --- --------- -- ------------- ----- ----- -- - ---- - ------ - -------- -- -- --------- --------- -- -- ------ --- --------- -- ------------- ----- ------ -- - -- ---展开代码
上面的例子是一个自定义的匹配器,它可以测试一个数值是否为真且能够被另一个数整除。该匹配器接受两个参数,一个是实际值,一个是期望值,它返回一个对象,其中包含 message 和 pass 两个属性。message 用于描述测试失败的情况,pass 用于表示测试是否通过。
在测试代码中调用该匹配器:
test("should be truthy and divisible by", () => { expect(10).toBeTruthyAndDivisibleBy(2); });
自定义匹配器中的参数验证
自定义匹配器的参数也可以进行验证。例子如下:
-- -------------------- ---- ------- --------------- ---------------------- --------- - -- ------- ------ --- --------- - ----- --- ------------- ----- -- --- - ------- ------------ - -- ------- -------- --- --------- - ----- --- --------------- ----- -- --- - ------- -------------- - ----- ---- - ------ - -------- --- -- -- ------ - ------ - -------- -- -- --------- --------- --- -- -- -------- -- ------------- ----- ----- -- - ---- - ------ - -------- -- -- --------- --------- -- -- -------- -- ------------- ----- ------ -- - -- ---展开代码
上面的例子中,toBeMultipleOf()
可以进行参数验证,如果参数不是数字类型,则会抛出异常。
自定义匹配器中使用 Jest 内置断言工具
在自定义匹配器中,有时候需要使用 Jest 内置的断言工具来帮助实现某些特定功能。可以通过调用 expect
函数来获取 Jest 内置的断言工具对象。
例子如下:
-- -------------------- ---- ------- --------------- ------------------------ --------- - ----- ---- - ------------------ -- ---------------------------- -- ------ - ------ - -------- -- -- --------- --------- --- -- ------- --- ----- ------------- ----- ----- -- - ---- - ------ - -------- -- -- --------- --------- -- ------- --- ----- ------------- ----- ------ -- - -- ---展开代码
上面的例子中,toContainAllKeys()
可以测试一个对象是否包含指定的所有属性。它使用了 Jest 内置的 hasOwnProperty()
方法来判断对象是否包含指定属性。
总结
自定义 Jest 匹配器可以让我们实现更加灵活的测试断言方法,从而更好地测试业务逻辑和数据结构。在自定义匹配器中,我们可以使用参数验证、Jest 内置断言工具等技术,实现各种特定的测试需求。
希望本文可以帮助你更好地掌握自定义 Jest 匹配器的技术。如果你想进一步学习 Jest 或者其他前端技术,请继续关注我们的博客。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65454a857d4982a6ebf08920