使用 Jest 测试 Express 应用中的 API 接口

阅读时长 5 分钟读完

当我们开发一个 Express 应用时,需要测试 API 接口是否按照预期工作。为此,我们可以使用 Jest 进行自动化测试。

在本文中,我们将学习如何使用 Jest 进行 Express 应用的 API 接口测试,并探讨一些注意事项和最佳实践。

环境配置

首先,我们需要将 Jest 安装为开发依赖项:

随后,为了在测试中使用 Express 应用,我们需要安装 supertest 模块:

创建测试文件

我们将测试代码放在 __tests__ 文件夹中,可以在根目录下创建该文件夹,也可以在 test/ 目录下创建。

在该文件夹中,创建一个名为 api.test.js 的文件,该文件用于测试我们的 API 接口是否按照期望工作。

编写测试用例

api.test.js 文件中,我们可以编写多个测试用例,以测试各个 API 接口。以下是一个示例测试用例:

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

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

该测试用例测试了 /users 路由的 GET 请求是否返回 JSON 数据,测试通过当且仅当 HTTP 响应状态为 200,且响应内容类型为 JSON 时。

注意,在此示例中,我们导入了应用程序 (app.js) 中的实例,并在测试中使用该实例。

运行测试

为了运行测试,我们可以执行以下命令:

如果测试通过,你会看到以下输出:

最佳实践

以下是一些使用 Jest 进行 Express 应用测试的最佳实践:

  • 每个测试用例应该是独立的,不应先执行其他测试用例。
  • 在测试中使用请求和响应正文中的 JSON 数据时,请使用 JSON.parse() 进行验证。
  • 在测试中使用随机端口启动服务器时,请使用 beforeAllafterAllbeforeEachafterEach 函数,以确保服务器在每个测试用例之间正确启动和关闭。
  • 对于需要传递参数的路由,请使用查询字符串或者请求正文中的 JSON 数据,而不应在 URL 中包含参数。
  • 测试文件应根据应用程序中的路由进行分组。

结论

使用 Jest 进行 Express 应用的 API 接口测试,是确保应用工作正常的关键方法。在编写测试用例时,请使用最佳实践,并确保它们独立、可读性强和可维护。

完整示例代码:

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

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

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

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

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

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

纠错
反馈