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'。
注意事项
在编写自定义匹配器时,有几个注意事项需要注意:
- 自定义匹配器中应该涵盖正常和异常情况,以便向开发者提供有关测试失败原因的详细错误信息。
- 您应该给自定义匹配器起一个好的名称,以便他人能够理解该匹配器的作用。
- 如果您发现需要在多个测试用例中使用相同的匹配器,您可以将其封装到一个单独的 JavaScript 模块中。在测试用例中引入该模块即可使用匹配器。
结论
Jest 中的自定义匹配器提供了一种简单而强大的机制,允许你编写定制的匹配逻辑来满足特定的测试需求。在编写自定义匹配器时,您应该确保涵盖正常和异常情况,并为其赋予一个描述性的名称。最后,您可以将自定义匹配器封装到一个单独的 JavaScript 模块中以便多个测试用例复用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67383d96317fbffedf0f0f32