Express.js 是一款流行的 Node.js 框架,它允许开发人员构建高性能且可扩展的应用程序。而 Jest 是一个可爱的 JavaScript 测试框架,能够让我们轻松地编写和运行各种类型的测试,包括单元测试和集成测试。在这篇文章中,我们将探讨如何在 Express.js 中使用 Jest 进行单元测试,以帮助开发人员提高代码质量并发现隐藏的问题。
步骤 1:安装依赖
首先,我们需要安装 Express.js 和 Jest 的依赖。在命令行中运行以下命令:
npm install express jest supertest --save-dev
这会将 Express.js、Jest 和 supertest 这三个库作为开发依赖项安装到我们的项目中。
步骤 2:编写测试用例
接下来,我们需要编写我们的第一个测试用例。在项目根目录中创建一个名为 app.test.js
的文件,并添加以下代码:
-- -------------------- ---- ------- ----- ------- - -------------------- ----- --- - ---------------- ------------- --- -- -- - ---------- ------ --- ---- -- -- - ------ ------------ --------- ------------ -- --
首先我们导入了 supertest 库来模拟 HTTP 请求,然后导入了我们的 Express.js 应用程序。接下来,定义了一个测试套件来描述我们的测试场景:当我们访问 URL /
时,我们应该收到一个返回状态代码为 200 的 HTTP 响应。
在测试套件里,我们定义了一个测试用例,使用 supertest 发送一个 GET 请求到根路径(/
),并期望得到一个 200 OK 的 HTTP 响应。
完成后,我们可以运行上述测试用例。在命令行中,运行以下命令:
npx jest app.test.js
可以看到测试用例运行成功,并且我们收到了我们所期望的响应。
步骤 3:测试其他端点
我们除了测试根路径以外,还需要测试其他端点,比如 /users
端点。我们来看看如何测试这个端点。在 app.test.js
文件中添加以下代码:
describe('GET /users', () => { it('should return an array of users', async () => { const response = await request(app).get('/users') expect(response.body).toEqual(expect.any(Array)) }) })
我们在测试套件中定义了一个 GET /users
的测试用例来验证用户数据是否返回了一个数组。在测试用例中,我们发起了一个请求到 /users
端点并得到响应。使用 Jest 的 expect 函数对响应体进行断言,是不是一个数组。这个测试用例已经足够覆盖我们的 /users
端点了。
步骤 4:代码覆盖率
Jest 还可以帮助我们生成代码覆盖率报告,以便我们了解我们的测试用例覆盖了多少代码。
在 package.json
文件中的 "scripts"
对象中添加以下命令:
"test": "jest --coverage"
这会在我们运行测试时,生成代码覆盖率报告。现在,运行 npm test
命令看看它是否工作正常。
在命令行中,运行 npm test
命令,然后查看生成的 coverage
文件夹中的 HTML 文件。这将打开一个可视化的报告,以便我们了解我们的测试用例覆盖了多少代码,并可以查看测试用例是否被覆盖到。
结论
在这篇文章中,我们了解了如何在 Express.js 中使用 Jest 进行单元测试。从安装依赖到编写测试用例和生成代码覆盖率报告,我们都完成了。这些步骤有助于开发人员在写代码的同时,发现和解决潜在的 bugs,提高代码的质量和可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671c89219babaf620fb135e1