实践使用Jest的Nest单元测试

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

前置条件

安装 Nodejs 环境,(>= 10.13.0, v13 版本除外),此部分网上有很多资料可以参考。

初始化项目

使用 Nest CLI 搭建的项目,操作简单且也提供了开箱即用的Jest框架

# 安装 Nest Cli
npm i -g @nestjs/cli
​
# 创建 Nest 项目
nest new project-name
复制代码

使用 Nest CLI 搭建的项目会创建一个初始项目结构。nestjs框架集成了jest测试框架,测试文件必须以 .spec 或 .test 结尾,测试文件位于与src同级的test目录下。

  • app.e2e-spec.ts文件是实现当前程序的端到端(end to end)测试,也可视为系统测试;
  • jest-e2e.json为jest配置文件

整个过程结束了, 然后在测试文件中写测试用例。

遇到问题

  1. Import 路径问题
  • 在spec.ts文件中引入模块时,但在执行 jest 时报错,找不到对应的模块,可以使用使用相对路径解决访问,若不是相对路径,单元测试容易导致找不到对应的模块。
# 找不到对应模块
import { UserService } from 'src/modules/user/user.service'; 
# 使用下面方法
import { UserService } from '../../user/user.service'; 
复制代码
  1. 写用例时的describe ,不支持从 "describe"返回 Promise
describe('', ()=> { 
    it('', async ()=> {
    });
})
复制代码
  1. 覆盖率和测试报告: jest --coverage
  • coverageReporters [array<string | [string, options]>]
  • Default: ["clover", "json", "lcov", "text"]
  1. 加入 jest-html-reporter 后报错:Could not resolve a module for a custom reporter
  • 因为未找到 模块,所以一直报错,配置错误,未能找到模块,使用相对路径可解决问题
  • 不建议使用 jest-html-report 显示的信息没有jest 自带的覆盖率显示的详细
  • yarn add jest-html-reporter --dev
  1. 本地测试时或者只运行某个测试用例时,可以通过 test.only() 方式。此方法适用在当你调试过程中部分方法出问题,可以进行运行这条测试。

  2. 支持按文件夹模块进行单元测试

  • 通过使用:testRegex 属性进行配置
  • 单个文件匹配:"testRegex":"user.controller.spec.ts",
  • 对个文件匹配: "testRegex": ["(user|role).*.spec.ts$"],
  • test 文件下对每个新建测试模块,然后在jest-cofing.json 中配置 "testRegex": ["./test/{testModule}/*"],

猜你喜欢

转载自juejin.im/post/7035866009521094686