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