如何在TypeScript库项目中用nyc(istanbul)排除测试代码生成覆盖率报告?
解决nyc生成TypeScript项目覆盖率报告时排除测试代码的问题
针对你的项目结构,我给你整理了具体的配置和操作步骤,帮你精准生成仅包含业务代码的覆盖率报告:
1. 确保nyc依赖已安装
如果还没装nyc,先通过包管理器安装开发依赖:
npm install nyc --save-dev # 或者用yarn yarn add nyc --dev
2. 配置nyc的排除/规则
推荐在项目根目录的package.json中添加nyc配置字段,这样更直观易维护:
"nyc": { // 仅纳入需要统计覆盖率的编译后业务代码 "include": [ "build/lib/**/*.js" ], // 排除所有测试相关文件,包括源码中的测试用例和编译后的测试代码 "exclude": [ "build/test/**/*.js", "build/test/**/*.spec.d.ts", "src/test/**/*.spec.tsx", "src/@types/**/*.d.ts" // 可选:如果不需要统计自定义类型文件的覆盖率,可以加上 ], // 指定覆盖率报告的格式,lcov用于生成可视化HTML报告,text-summary在控制台输出摘要 "reporter": ["lcov", "text-summary"], // 因为你的编译代码已经包含内联源映射,设为true让nyc解析映射,将报告映射回TypeScript源码 "sourceMap": true, "instrument": false // 不需要手动instrument,因为我们直接用编译后的代码 }
3. 编写覆盖率测试脚本
在package.json的scripts中添加测试+生成覆盖率的命令:
"scripts": { "test": "mocha build/test/**/*.spec.js", // 原测试命令 "test:coverage": "nyc npm run test" // 基于原测试命令生成覆盖率 }
如果你的测试框架是Jest等其他工具,只需要把npm run test替换成对应的测试命令即可。
4. 生成并查看报告
执行以下命令生成覆盖率报告:
npm run test:coverage
执行完成后:
- 控制台会输出覆盖率的文本摘要
- 项目根目录会生成
lcov-report文件夹,打开其中的index.html就能查看可视化的覆盖率报告,报告中的代码会映射回你的TypeScript源码,方便定位未覆盖的业务代码。
内容的提问来源于stack exchange,提问作者Shad Sterling
相关产品推荐
相关产品推荐

