如何在Nx+NestJS的Jest E2E/集成测试中获取完整代码覆盖率?
解决Nx项目中Jest E2E测试覆盖率未包含目标代码的问题
你的项目目录结构如下:
src/ ├─ apps/ │ ├─ app1/ │ ├─ app1-e2e/ │ ├─ app2/ ├─ libs/ │ ├─ lib1/
你在app1-e2e里编写的Jest集成测试用到了app1和lib1的代码,但生成覆盖率报告时只显示测试文件自身的覆盖率,没有把目标代码纳入统计范围。要解决这个问题,只需调整Jest的覆盖率收集配置:
方法一:修改app1-e2e的jest.config.ts
找到apps/app1-e2e/jest.config.ts文件,添加或修改collectCoverageFrom字段,明确指定要收集覆盖率的源码路径:
export default { // 保留原有其他配置 collectCoverageFrom: [ // 包含app1的所有源码文件 '../app1/**/*.{ts,tsx,js,jsx}', // 包含lib1的所有源码文件 '../../libs/lib1/**/*.{ts,tsx,js,jsx}', // 排除app1自己的单元测试文件 '!../app1/**/*.spec.{ts,tsx,js,jsx}', // 排除lib1自己的单元测试文件 '!../../libs/lib1/**/*.spec.{ts,tsx,js,jsx}' ], };
方法二:修改Nx的project.json配置
如果项目通过project.json管理测试参数,找到apps/app1-e2e/project.json中的targets.test.options节点,添加collectCoverageFrom配置:
{ "targets": { "test": { "executor": "@nx/jest:jest", "options": { // 保留原有其他配置 "collectCoverageFrom": [ "../app1/**/*.{ts,tsx,js,jsx}", "../../libs/lib1/**/*.{ts,tsx,js,jsx}", "!../app1/**/*.spec.{ts,tsx,js,jsx}", "!../../libs/lib1/**/*.spec.{ts,tsx,js,jsx}" ] } } } }
配置完成后,重新运行nx run app1-e2e --codeCoverage,生成的覆盖率报告就会包含app1和lib1的代码统计结果。
内容的提问来源于stack exchange,提问作者Alex Ramirez
相关产品推荐
相关产品推荐

