如何使用 Jest 测试 Node.js 应用程序?

阅读时长 6 分钟读完

前言

Jest 是一个非常受欢迎的 JavaScript 测试框架。它提供了易于使用和强大的功能,因此在前端和后端开发中都广受欢迎。在本文中,我们将介绍如何在 Node.js 应用程序中使用 Jest 进行测试。在本文中,我们将介绍如何使用 Jest 编写简单、有用和可重复的测试。

安装 Jest

我们可以在 Node.js 项目中使用 npm 安装 Jest:

安装完成后,我们就可以通过运行下面的命令在终端中启动 Jest:

创建测试文件

在我们开始编写测试之前,我们需要创建一个测试文件夹,以便我们可以组织我们的测试用例。通常情况下,我们将其命名为 __tests__ 文件夹,它应该位于我们的项目根目录中。在 __tests__ 文件夹中,我们将继续创建一个名为 index.test.js 的文件,这是我们要编写测试用例的地方。

编写测试用例

现在我们已经安装了 Jest 并创建了测试文件夹,我们将开始编写我们的第一个测试用例。下面是一个简单的测试用例,它测试了我们的 sum 函数是否正确工作:

这是我们测试用例的函数结构。我们定义了一个名为 sum 的函数,并编写了一个测试用例来验证其功能是否正确。test 函数接受两个参数:

  1. 描述测试用例的字符串。
  2. 一个测试函数,该函数包含要针对某个特定行为而测试的代码。

在这个测试函数中,我们使用了 expect 函数来断言我们的 sum 函数是否按照预期工作。具体来说,我们使用了 toBe 匹配器来检查 sum 函数的输出是否等于 3。

使用模块导入和导出

在 Node.js 应用程序中,我们通常通过导入其他模块来重用代码。如果我们要测试此类模块,我们应该使用 module.exports 将它们暴露出去。这样,我们就可以在测试文件中使用 require 函数来导入它们。

下面是一个使用 module.exportsrequire 的示例:

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

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

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

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

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

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

使用 async / await 进行异步测试

在 Node.js 中,许多操作都是异步的,例如读取文件或从数据库中获取数据。Jest 允许我们使用 asyncawait 语法编写异步测试。在本示例中,我们将编写一个测试用例,该测试用例使用 fs.readFile 函数从文件中读取文本内容。

这个测试用例使用了 asyncawait 语法来等待 fs.readFile 函数返回结果。在该函数返回结果之后,我们使用 expect 函数来验证文本内容是否等于 'Hello, World!'。由于我们在测试用例中使用了 asyncawait,因此 Jest 知道我们要进行异步测试。

使用 Jest 的 Mock 功能

在测试中,我们有时需要模拟某些操作,例如模拟从远程 API 获取数据或模拟用户输入。Jest 具有一种内置的 Mock 功能,它使我们能够模拟这些操作。

在本示例中,我们将演示如何使用 Mock 实现假的 API 请求。我们将创建一个名为 fetchData 的函数,它使用 fetch 函数从远程 API 获取数据。在测试用例中,我们将使用 Jest 的 Mock 功能来模拟这个 fetchData 函数。

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

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

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

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

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

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

在这个测试用例中,我们首先创建了一个假的响应对象 mockResponse,并在 mockJsonPromise 中使用 Promise.resolve 将它变成一个等待解决的 Promise。接下来,我们创建了一个假的 fetch 函数,并在 mockFetchPromise 中使用 Promise.resolve 将其包装在一个等待解决的 Promise 中。然后,我们使用 jest.spyOn 函数将 fetch 函数替换为我们的假 fetch 函数。

最后,我们调用 fetchData 函数获取数据,并使用 expect 函数来检查返回的数据是否等于 mockResponse。在测试用例完成后,我们使用 global.fetch.mockRestore() 来恢复原始的 fetch 函数。

总结

在本文中,我们介绍了如何使用 Jest 在 Node.js 应用程序中进行测试。我们学习了如何创建测试文件夹、编写测试用例、使用异步测试和使用 Jest 的 Mock 功能。通过这些技巧,我们可以编写可靠和可重复的测试,这些测试可以帮助我们消除代码问题和维护成本。

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

纠错
反馈