Jest 中针对参数和返回值的 mock

Jest 是一个流行的 JavaScript 测试框架,它提供了强大的 mock 功能,能够帮助我们轻松地模拟函数的行为。在本文中,我们将探讨 Jest 中针对参数和返回值的 mock,以及如何使用它们进行单元测试。

参数的 mock

在 Jest 中,我们可以使用 jest.fn() 函数创建一个模拟函数。这个函数将记录每次被调用时的参数和返回值,并提供一些方便的方法来检查它们。

模拟函数的参数

我们可以使用 .mock.calls 属性来访问模拟函数的参数。这个属性是一个数组,其中每个元素都是一个数组,表示每次调用时传递的参数。例如,假设我们有一个 add 函数,它接收两个数字并返回它们的和:

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

我们可以使用 jest.fn() 创建一个模拟函数,并调用它两次:

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

现在,我们可以通过访问 .mock.calls 属性来检查这些调用的参数:

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

模拟函数的返回值

我们可以使用 .mockReturnValue() 方法来指定模拟函数的返回值。这个方法接收一个参数,表示模拟函数的返回值。例如,假设我们有一个 multiply 函数,它接收两个数字并返回它们的乘积:

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

我们可以使用 jest.fn() 创建一个模拟函数,并使用 .mockReturnValue() 方法指定它的返回值:

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

现在,每次调用 mockMultiply() 都将返回 10:

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

模拟函数的实现

除了使用 .mockReturnValue() 方法指定模拟函数的返回值,我们还可以使用 .mockImplementation() 方法来指定它的实现。这个方法接收一个函数作为参数,表示模拟函数的实现。例如,假设我们有一个 divide 函数,它接收两个数字并返回它们的商:

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

我们可以使用 jest.fn() 创建一个模拟函数,并使用 .mockImplementation() 方法指定它的实现:

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

现在,每次调用 mockDivide() 都将执行我们指定的实现:

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

返回值的 mock

在某些情况下,我们需要模拟函数的返回值,以便测试代码的正确性。在 Jest 中,我们可以使用 .mockReturnValue() 方法来指定模拟函数的返回值。

模拟函数的返回值

我们可以使用 .mockReturnValue() 方法来指定模拟函数的返回值。这个方法接收一个参数,表示模拟函数的返回值。例如,假设我们有一个 getUser 函数,它接收一个用户 ID 并返回一个用户对象:

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

我们可以使用 jest.fn() 创建一个模拟函数,并使用 .mockReturnValue() 方法指定它的返回值:

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

现在,每次调用 mockGetUser() 都将返回我们指定的对象:

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

模拟异步函数的返回值

如果我们要模拟一个异步函数的返回值,我们可以使用 .mockResolvedValue() 方法来指定它的返回值。这个方法接收一个参数,表示模拟函数的返回值。例如,假设我们有一个 login 函数,它接收一个用户名和密码并返回一个用户对象:

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

我们可以使用 jest.fn() 创建一个模拟函数,并使用 .mockResolvedValue() 方法指定它的返回值:

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

现在,每次调用 mockLogin() 都将返回一个解析后的 Promise,其值为我们指定的对象:

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

总结

在 Jest 中,我们可以使用 .mock.calls 属性、.mockReturnValue() 方法和 .mockImplementation() 方法来模拟函数的参数和实现。我们还可以使用 .mockReturnValue() 方法和 .mockResolvedValue() 方法来模拟函数的返回值。这些功能使我们能够轻松地编写单元测试,并确保我们的代码能够正确地处理各种输入和输出。

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