在开发 Express 应用程序时,中间件是一个非常重要的概念。中间件可以让我们在请求到达目标路由之前,对请求进行修改、验证、处理等一系列操作。然而,随着应用规模的不断增大,中间件的数量也会变得越来越多,这将为我们的测试工作带来很大的挑战。
在本文中,我们将介绍如何使用 Jest 对 Express 中间件进行测试。我们将通过一个具体的示例来展示如何编写测试用例和使用 Jest 提供的测试工具,以便更好地管理和测试我们的应用程序。
示例
我们将使用 Express 来编写一个示例应用程序。这个应用程序包含以下两个中间件:
logger
中间件:它将请求的方法、URL 和时间戳记录到控制台上。auth
中间件:它检查请求头中是否包含有效的身份验证令牌。如果令牌无效,则返回一个401 Unauthorized
的响应。
例子应用程序代码如下:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- ------ - ----- ---- ----- -- - -------------------------- ---------- - ---------------- ------- - ----- ---- - ----- ---- ----- -- - ----- ----- - ----------------------------- -- -------- - ------ -------------------- - -- ------ ----- ------- ------- - ---------------- -------------- ------------ ----- ---- -- - --------------- --------- --- ---------------- -- -- - -------------------- --- --------- -- ---- -------- ---
测试工具的准备
在运行 Jest 测试用例之前,我们需要准备好一些必要的测试工具。
添加 Jest 依赖到我们的应用程序中:
npm install --save-dev jest supertest
在 package.json
文件的 scripts
中,添加一个 test
命令:
"scripts": { "test": "jest" },
添加一个名为 tests
的文件夹,以供编写我们的测试用例。在该文件夹中,创建一个名为 app.test.js
的文件。
现在,我们已经准备好编写我们的测试用例了。
编写测试用例
验证 logger 中间件是否能够正确记录日志
我们首先来编写一个测试用例,用于验证我们的 logger
中间件是否能够正确记录日志。
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --- - ------------------ ---------------- ------------ -- -- - ---------- --- ---- --------- ----- -- -- - ----- --- - ----- ---------------------- -------------------------------- ------------------------------- --------- --- ---
在该测试用例中,我们使用了 supertest
来模拟一个 HTTP 请求。我们期望获得一个 200 OK
的响应,同时,我们还期望控制台上能够输出请求的相关信息。如果控制台上没有输出任何信息,那么测试用例将会失败。
验证 auth 中间件能够正确验证身份验证令牌
现在,我们将编写一个测试用例,用于验证我们的 auth
中间件是否能够正确验证身份验证令牌。
describe('auth middleware', () => { it('should return a 401 status code when the authorization header is missing', async () => { const res = await request(app).get('/'); expect(res.status).toEqual(401); }); });
在该测试用例中,我们只发送了一个请求,但是我们没有在该请求中添加有效的身份验证令牌。我们期望获得一个 401 Unauthorized
的响应。
总结
在本文中,我们介绍了如何使用 Jest 对 Express 中间件进行测试。我们通过一个具体的示例来展示如何编写测试用例和使用 Jest 提供的测试工具。这将有助于我们更好地管理和测试我们的应用程序,帮助我们尽早发现和解决问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a968a448841e989459fa56