在前端开发中,测试是非常重要的一环。Jest 是目前前端最流行的测试框架之一,而 Matcher 是 Jest 中用于比较值的一种机制。Matcher 自带的匹配器已经可以满足一般需求,但是在某些情况下,我们需要自定义 Matcher 来满足自己的需求。本文将介绍如何为 Jest 测试写自定义的 Matcher。
什么是 Matcher
Matcher 是 Jest 框架中用于比较值的一种机制。在 Jest 中,每个测试用例都包含一个或多个 Matcher。在一个 Matcher 中,测试的值和期望的值进行比较,如果匹配则测试通过,否则测试失败。
例如,以下是一个简单的 Matcher:
test('two plus two is four', () => { expect(2 + 2).toBe(4); });
在这个 Matcher 中,使用 expect
函数来设置期望值,toBe
函数来进行比较。如果 2 + 2 的值等于 4,则测试通过,反之则失败。
为什么要自定义 Matcher
自带的 Matcher 已经可以满足一般的测试需求。但是在某些情况下,我们需要自定义 Matcher 来满足自己的需求。
例如,我们有一个函数 getUserInfo
,它返回一个 Promise 对象,当 Promise 对象成功时,返回一个包含用户信息的对象。我们希望测试这个函数的返回值,但是由于 Promise 的异步特性,如果我们直接比较返回值,测试会一直处于 Pending 状态,无法结束。这个时候,我们就需要自定义 Matcher 来解决这个问题。
如何自定义 Matcher
为了自定义 Matcher,我们需要使用 Jest 提供的 expect.extend
函数。这个函数可以将自定义的 Matcher 注册到 Jest 中,使我们能够在测试用例中使用它。
以下是一个简单的自定义 Matcher 示例,用于测试一个函数 add
的返回值是否为偶数:
-- -------------------- ---- ------- --------------- ------------------ - ----- ---- - -------- - - --- -- -- ------ - ------ - -------- -- -- --------- ----------- --- -- -- ---- -------- ----- ----- -- - ---- - ------ - -------- -- -- --------- ----------- -- -- ---- -------- ----- ------ -- - -- --- ------------ - --- - ------- -- -- ---- -------- -- -- - ------------- --------------- --- -------- ------ -- - ------ - - -- -
在这个例子中,我们定义了一个 toBeEven
的 Matcher。它接收一个参数 received
,即被测试的值。在 Matcher 中,我们先判断这个值是否为偶数,如果是,返回测试通过的结果,否则返回测试失败的结果。在测试用例中,我们使用 toBeEven
来验证 add(2, 2)
的返回值是否为偶数。
Matcher 的参数
自定义 Matcher 可以接收任意数量的参数。在 Matcher 中,我们可以使用这些参数来满足自己的需求。例如,以下是一个自定义 Matcher 示例,用于测试一个数组的长度是否等于指定值:
-- -------------------- ---- ------- --------------- --------------------------- ------- - ----- ---- - --------------- --- ------- -- ------ - ------ - -------- -- -- --------- ----- -- ------ ------------------ --- -- -- ------ -- ----------- ----- ----- -- - ---- - ------ - -------- -- -- --------- ----- -- ------ ------------------ -- -- ------ -- ----------- ----- ------ -- - -- --- ----------- --- --- -------- -------- -- -- - ---------- -- ------------------------- --- ----------- ---- --- ---- --- -------- -------- -- -- - ---------- -- ----------------------------- ---
在这个例子中,我们定义了一个 toBeArrayOfLength
的 Matcher。它接收两个参数:被测试的数组 received
和期望的数组长度 length
。在 Matcher 中,我们使用这两个参数来比较数组的长度是否等于期望的值。
Matcher 的效率
自定义 Matcher 是任意 JavaScript 代码。在定义自定义 Matcher 时,我们应该尽可能保证 Matcher 的效率,避免影响测试的执行速度。
结论
自定义 Matcher 是 Jest 测试框架中非常有用的工具。它可以帮助我们满足独特的测试需求,定制化我们的测试用例。本文介绍了 Matcher 的基本概念和用法,同时给出了多个自定义 Matcher 的示例。在使用自定义 Matcher 时,我们需要尽可能保证 Matcher 的效率,避免影响测试的执行速度。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671e091c2e7021665ef547fb