Jest 单元测试中如何检查 mock 函数是否被调用过?

在进行前端单元测试时,我们通常需要使用 mock 函数模拟外部依赖,以便测试我们的代码是否正确处理这些依赖。但是,如何在 Jest 单元测试中检查 mock 函数是否被正确调用过呢?本文将为您介绍如何实现这一功能。

mock 函数简介

在 Jest 中,我们可以使用 jest.fn() 创建一个 mock 函数。这个 mock 函数可以模拟任何函数,并且可以被传递到我们需要测试的函数中,以便我们测试函数的行为是否正确。

例如,我们有一个名为 fetchData 的函数,它从外部 API 获取数据,并返回一个 Promise。我们可以使用如下代码创建一个 mock 函数:

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

然后我们可以在测试用例中将这个 mock 函数传递给我们要测试的函数,以便测试它是否正确处理了 fetchData 函数的返回值:

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

在这个测试用例中,我们将 fetchData 的 mock 函数传递给了 myFunction,并期望它返回 'data'。

如何检查 mock 函数是否被调用过

在进行单元测试时,我们通常需要检查 mock 函数是否被正确调用过。Jest 提供了多种方法来实现这一功能。

检查 mock 函数的调用次数

我们可以使用 mockFunction.mock.calls 属性来检查 mock 函数的调用次数。这个属性是一个数组,其中每个元素都是一个数组,包含了 mock 函数的参数列表。因此,我们可以通过检查这个数组的长度来确定 mock 函数被调用的次数。

例如,我们可以编写如下测试用例来检查 fetchData 函数被调用了一次:

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

在这个测试用例中,我们调用了 myFunction 并将 fetchData 的 mock 函数传递给它。然后,我们使用 expect 断言检查 fetchData.mock.calls.length 是否等于 1。

检查 mock 函数的参数

除了检查 mock 函数的调用次数之外,我们还可以检查它的参数是否正确。我们可以使用 mockFunction.mock.calls 属性和 expect.any() 方法来实现这一功能。

例如,我们可以编写如下测试用例来检查 fetchData 函数被调用时,是否传递了正确的参数:

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

在这个测试用例中,我们调用了 myFunction 并将 fetchData 的 mock 函数传递给它。然后,我们使用 expect 断言检查 fetchData.mock.calls[0][0] 是否等于我们期望的值。

检查 mock 函数的返回值

除了检查 mock 函数的调用次数和参数之外,我们还可以检查它的返回值是否正确。我们可以使用 mockFunction.mockReturnValue() 方法来设置 mock 函数的返回值,并使用 expect 断言来检查它是否等于我们期望的值。

例如,我们可以编写如下测试用例来检查 fetchData 函数的返回值是否正确:

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

在这个测试用例中,我们调用了 myFunction 并将 fetchData 的 mock 函数传递给它。然后,我们使用 expect 断言检查 result 是否等于我们期望的值。

总结

在 Jest 单元测试中,我们可以使用 mock 函数模拟外部依赖,并使用 mockFunction.mock.calls 属性、expect.any() 方法和 mockFunction.mockReturnValue() 方法来检查 mock 函数的调用次数、参数和返回值。这些功能可以帮助我们编写更加完善和可靠的单元测试。

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