当我们开发一个 Express 应用时,需要测试 API 接口是否按照预期工作。为此,我们可以使用 Jest 进行自动化测试。
在本文中,我们将学习如何使用 Jest 进行 Express 应用的 API 接口测试,并探讨一些注意事项和最佳实践。
环境配置
首先,我们需要将 Jest 安装为开发依赖项:
npm install --save-dev jest
随后,为了在测试中使用 Express 应用,我们需要安装 supertest
模块:
npm install --save-dev supertest
创建测试文件
我们将测试代码放在 __tests__
文件夹中,可以在根目录下创建该文件夹,也可以在 test/
目录下创建。
在该文件夹中,创建一个名为 api.test.js
的文件,该文件用于测试我们的 API 接口是否按照期望工作。
编写测试用例
在 api.test.js
文件中,我们可以编写多个测试用例,以测试各个 API 接口。以下是一个示例测试用例:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --- - ------------------ ------------- -------- -- -- - ------------ ---- ------ ----- -- -- - ----- -------- - ----- --------------------------- -------------------------------------- ---------------------------------------------------------------------- --- ---
该测试用例测试了 /users
路由的 GET 请求是否返回 JSON 数据,测试通过当且仅当 HTTP 响应状态为 200,且响应内容类型为 JSON 时。
注意,在此示例中,我们导入了应用程序 (app.js
) 中的实例,并在测试中使用该实例。
运行测试
为了运行测试,我们可以执行以下命令:
jest
如果测试通过,你会看到以下输出:
PASS __tests__/api.test.js GET /users ✓ responds with JSON (6ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total
最佳实践
以下是一些使用 Jest 进行 Express 应用测试的最佳实践:
- 每个测试用例应该是独立的,不应先执行其他测试用例。
- 在测试中使用请求和响应正文中的 JSON 数据时,请使用
JSON.parse()
进行验证。 - 在测试中使用随机端口启动服务器时,请使用
beforeAll
、afterAll
、beforeEach
和afterEach
函数,以确保服务器在每个测试用例之间正确启动和关闭。 - 对于需要传递参数的路由,请使用查询字符串或者请求正文中的 JSON 数据,而不应在 URL 中包含参数。
- 测试文件应根据应用程序中的路由进行分组。
结论
使用 Jest 进行 Express 应用的 API 接口测试,是确保应用工作正常的关键方法。在编写测试用例时,请使用最佳实践,并确保它们独立、可读性强和可维护。
完整示例代码:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --- - ------------------ ------------- -------- -- -- - ------------ ---- ------ ----- -- -- - ----- -------- - ----- --------------------------- -------------------------------------- ---------------------------------------------------------------------- --- --- -------------- -------- -- -- - ------------ ---- ------ ----- -- -- - ----- -------- - ----- ---------------------------------- ----- ------- --- -------------------------------------- ---------------------------------------------------------------------- -------------------------------------------------------- --------- --- --- ------------- ------------ -- -- - ------------ ---- ------ ----- -- -- - ----- -------- - ----- ----------------------------------- ----- ----- --- -------------------------------------- ---------------------------------------------------------------------- -------------------------------------------------------- ------- --- --- ---------------- ------------ -- -- - ------------ ---- ------ ----- -- -- - ----- -------- - ----- -------------------------------- -------------------------------------- ---------------------------------------------------------------------- --- ---
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ff9e051b0bf82c71cd0175