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

阅读时长 6 分钟读完

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

纠错
反馈