Jest 中的 Mock 函数

Jest 是一个流行的 JavaScript 测试框架,它有许多方便易用的功能,其中包括 Mock 函数。Mock 函数可以模拟真实的函数行为,并且可以在测试中使用它们。在这篇文章中,我们将讨论 Jest 中的 Mock 函数及其用法,包括创建 Mock 函数、Mock 函数的参数与返回值等。

创建 Mock 函数

在 Jest 中创建一个 Mock 函数很容易,只需使用 jest.fn() 方法即可。例如,下面是一个简单的例子,我们创建一个 Mock 函数并调用它:

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

这段代码将输出两次 undefined,因为我们没有给 Mock 函数任何的参数和返回值。现在,我们来看看如何让 Mock 函数返回我们想要的值。

设置 Mock 函数的返回值

Jest 中的 Mock 函数可以使用 mockReturnValue() 方法来设置返回值,例如:

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

这段代码将输出 42,因为我们已经在 Mock 函数中设置了返回值为 42。我们还可以使用 mockResolvedValue() 方法来设置异步函数的返回值,例如:

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

这段代码将输出 42,因为我们已经在 Mock 函数中设置了异步函数的返回值为 42。当然,我们还可以使用 mockRejectedValue() 方法来模拟异步函数的拒绝。

Mock 函数的参数

Jest 中的 Mock 函数可以使用 mock.calls 属性来访问所有的调用参数数组,例如:

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

这段代码将输出 [[1, 2, 3]],因为我们已经在 Mock 函数中传入了参数 123,并使用 mock.calls 属性来访问它们。我们还可以使用 mockImplementation() 方法来使用自定义的函数逻辑执行 Mock 函数,例如:

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

这段代码将输出 3,因为我们已经在 Mock 函数中自定义了函数行为,将 xy 相加并返回它们的和。当然,我们还可以使用 mockImplementationOnce() 方法来模拟函数多次调用时返回不同的值。

Mock 模块

除了 Mock 函数之外,Jest 还支持 Mock 模块的功能。Mock 模块可以用来模拟真实模块的行为,并在测试中使用它们。

例如,我们有一个真实的 sum.js 模块,它包含了一个简单的 sum() 函数,用于将两个数字相加:

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

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

我们可以使用 Jest 中的 jest.mock() 方法来替换它,例如:

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

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

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

这段代码将使用 Mock 模块来替换 sum.js,并将其返回值设置为 3。我们可以使用 expect() 断言来验证它是否运行正确。当然,我们还可以在测试中使用 jest.spyOn() 方法来跟踪函数调用和其参数。

结论

在 Jest 中使用 Mock 函数是一种方便易用的方式来模拟函数行为,并在测试中使用它们。Mock 函数不仅可以设置返回值和参数,还可以使用自定义的函数逻辑执行。Jest 还支持 Mock 模块,它可以用于模拟真实模块的行为,并在测试中使用它们。Mock 函数和 Mock 模块的结合使用,可以大大提高测试效率和代码质量。

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