Jest 测试时如何 Mock 掉某个模块

阅读时长 3 分钟读完

Jest 是一个流行的 JavaScript 测试框架,可用于编写单元测试、集成测试和端到端测试等。在测试时,经常需要模拟或替换外部依赖模块以保证测试的可靠性和稳定性。在 Jest 中,我们可以使用 Mock 实现模块的模拟或替换。

本文将详细介绍在 Jest 中如何 Mock 掉某个模块,包括使用 jest.mock() 和手动 Mock。

使用 jest.mock()

Jest 提供了 jest.mock() 函数用于自动模拟模块。当导入被模拟的模块时,Jest 会自动返回模拟的对象。下面是使用 jest.mock() 模拟 Node.js 模块的例子:

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

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

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

上面的代码中,我们使用 jest.mock() 模拟 Node.js 模块 fs,并在测试用例中使用 fs.readFile 模拟函数。通过调用 fs.readFile.mockImplementation() 方法,我们定义了一个假函数,这个函数在被调用时会抛出一个错误。最后我们用 expect() 判断是否抛出了错误。

需要注意的是,使用 jest.mock() 进行模拟时,需要在导入被测试模块之前进行模拟。

手动 Mock

除了使用 jest.mock() 自动进行模拟外,我们也可以手动编写模拟模块。手动编写模拟模块可以更精细的控制模拟模块的行为和返回值。

下面是手动 Mock 的例子,我们手动编写了一个模拟模块 api.js:

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

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

在手动 Mock 中,我们在一个名为 mocks 的文件夹中创建一个与测试模块同名的模拟模块,并在其中手动实现模块中定义的函数。在测试运行的时候,指定 Jest 使用手动 Mock。

需要注意的是,手动 Mock 与自动 Mock 相比,需要额外手动创建 mocks 文件夹和模拟模块,在一定程度上增加了维护成本。

总结

在 Jest 中 Mock 模块可以让我们更好地控制测试时的数据和行为,实现单元测试的可靠性和代码的稳定性。本文介绍了 Jest 中 Mock 模块的两种方法:使用 jest.mock() 和手动 Mock,各有优劣。需要在实际中根据需要进行选择。

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

纠错
反馈