在 Jest 中使用 jest.fn() 进行 mock

阅读时长 4 分钟读完

前言

在前端开发中,我们经常需要进行单元测试以确保代码的正确性。而在单元测试中,我们经常需要 mock 掉一些函数或者模块,使得测试不会因为外部的因素而受到干扰。在 Jest 中,我们可以使用 jest.fn() 来进行 mock。

jest.fn() 简介

jest.fn() 是 Jest 中用来创建 mock 函数的函数,读作 jest function。通过它,我们可以方便地创建一个 mock 函数,并且可以通过一系列方法来对这个 mock 函数进行相关操作。

使用 jest.fn() 进行 mock

在 Jest 中,我们可以使用 jest.fn() 来 mock 掉一个函数。具体来说,我们可以使用 jest.mock() 函数来 mock 掉一个模块,然后在测试中使用 jest.fn() 代替模块中的某个函数。例如,假设我们有一个模块叫做 data.js,其中包含了一个函数叫做 fetchData:

我们可以使用 jest.fn() 来 mock 掉这个函数,如下所示:

这样,我们就成功 mock 掉了 fetchData 函数,可以在测试中使用 jest.fn() 来代替它。

如何使用 jest.fn() 创建 mock 函数

除了可以使用 jest.mock() 来 mock 掉一个模块中的函数外,我们还可以使用 jest.fn() 直接创建一个 mock 函数。具体来说,我们可以像下面这样创建一个 mock 函数:

这样,我们就创建了一个名叫 mockFunc 的 mock 函数。这个 mock 函数可以用来 mock 掉某个函数,并且在测试中用来检查一些特定的行为是否被执行。

如何验证 mock 函数的调用

通过 jest.fn() 创建的 mock 函数还可以用来验证一些特定的调用行为,具体来说,我们可以通过下面这些方法来验证:

  • mockFunc.mock.calls:一个数组,其中每个元素表示该 mock 函数被调用时的参数列表。
  • mockFunc.mock.calls.length: mock 函数被调用的次数。
  • mockFunc.mock.results:一个数组,其中包含了 mock 函数每次执行的结果。
  • mockFunc.mock.instances:一个数组,其中包含了调用该 mock 函数时创建的所有实例对象。

这些方法可以用来监视我们的 mock 函数被调用的情况,并且可以通过它们来验证我们的代码行为是否正确。例如,假设我们有一个名为 fetchData 的函数,我们可以像下面这样使用 jest.fn() 进行 mock,并且通过 mockFunc.mock.calls.length 来验证 fetchData 函数是否被调用:

如何给 mock 函数设置返回值

除了可以使用上面提到的方法来监视 mock 函数的调用情况外,我们还可以设置 mock 函数的返回值。具体来说,我们可以通过 mockFunc.mockReturnValue() 或者 mockFunc.mockResolvedValue() 等方法来设置 mock 函数的返回值。例如,假设我们有一个名为 fetchData 的函数,我们可以像下面这样使用 jest.fn() 进行 mock,并设置其返回值:

这样,我们就成功设置了 mock 函数的返回值,并且在测试中使用该返回值来检查 fetchData 函数是否正常工作。

结论

在 Jest 中,我们可以使用 jest.fn() 来进行 mock 函数。通过它,我们可以轻松地 mock 掉一个函数或者模块,并且可以使用多种方法来验证 mock 函数的调用情况和设置 mock 函数的返回值。掌握 jest.fn() 的使用,可以帮助我们在单元测试中更加轻松地进行代码的验证和测试。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674ff02afbd23cf890710926

纠错
反馈