Nest.js 是一个基于 Node.js 的 Web 应用程序框架,它可以帮助我们快速构建高效且易于维护的服务器端应用。而 Jest 是一个流行的 JavaScript 测试框架,它可用于为项目编写各种测试。
在本文中,我们将看到如何使用 Jest 测试 Nest.js 应用。
准备工作
在开始之前,我们需要确保已经安装了 Node.js 和 Nest.js。建议使用最新版本的 Node.js 和 Nest.js。
接下来我们需要安装 Jest:
--- ------- ---------- ----
为了让 Jest 理解 TypeScript 代码,我们还需要安装一些额外的依赖:
--- ------- ---------- ----------- -------
这些包将使 Jest 具备识别 TypeScript 代码和进行类型检查的能力。
接下来,我们需要配置 Jest。
在项目根目录下创建一个 jest.config.js
文件,并将以下内容添加到该文件中:
-------------- - - ---------------- ------- --------------------- ------ ------ ---------- - ------------ ---------- -- ------ ------------------ ---------- ---------------- -------------------- -------------------- ------------------ ----------- ------------ ------ --
这个配置告诉 Jest 什么文件应该被测试、如何转换 TypeScript 代码以及测试环境应该是 Node.js。
编写测试
接下来,我们将编写一些测试用例来测试我们的 Nest.js 应用。
首先,我们将创建一个简单的控制器,它将返回一个对象。
在 src/app.controller.ts
中添加以下代码:
------ - ----------- --- - ---- ----------------- ------------- ------ ----- ------------- - ------------- ----------- - -------- ------ - - ------ - -------- ------ ------- -- - -
然后,我们将添加一个测试用例来测试这个控制器。
在 src/app.controller.spec.ts
中添加以下代码:
------ - ----- ------------- - ---- ------------------ ------ - ------------- - ---- ------------------- ------------------------- -- -- - --- -------------- -------------- ---------------- -- -- - ----- ---- ------------- - ----- -------------------------- ------------ ---------------- ------------- ------------- - -------------------------------------- --- ---------------- -- -- - ---------- ------ ------ --------- -- -- - ------------------------------------------ -------- ------ ------- --- --- --- ---
在这个测试用例中,我们首先使用 Test.createTestingModule
创建一个测试模块,然后将控制器添加到该模块中。
接着,我们使用 app.get
方法获取控制器的实例,然后编写测试用例来测试 getHello
方法是否返回了正确的响应。
运行测试
我们已经编写了用于测试 Nest.js 应用程序的测试用例。接下来,我们将运行这个测试套件。
我们可以使用以下命令来运行 Jest 测试套件:
--- --- ----
该命令会启动 Jest 并运行所有测试用例。
在测试完成后,Jest 会生成一个报告,显示测试覆盖率和测试用例的运行时间等信息。
结论
在本文中,我们看到了如何使用 Jest 测试 Nest.js 应用程序。使用测试套件可以确保应用程序的质量,减少代码错误,并提高开发速度。希望本文对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66ffa22d1b0bf82c71cd58bb