nyc 是 istanbul 的下一代 cli 工具,用于 javascript 项目代码覆盖率统计;需本地安装、配置 scripts、指定 include/exclude、设置 reporter 和阈值,并适配 jest/mocha/vitest 等框架,最终通过 html 报告查看行/函数/分支/语句覆盖率。

在 JavaScript 项目中,用 Istanbul(现在主要通过其命令行工具 NYC)统计代码覆盖率非常常见。它能帮你清楚看到哪些代码被测试执行过、哪些没被覆盖,是提升测试质量的重要手段。
安装 NYC 并配置基础运行方式
NYC 是 Istanbul 的下一代 CLI 工具,推荐直接使用它:
- 本地安装(推荐):
npm install --save-dev nyc - 在
package.json的scripts中添加:"test:coverage": "nyc npm test"(假设你已有"test"脚本运行 Jest/Mocha 等) - 运行:
npm run test:coverage,NYC 会自动注入覆盖率收集逻辑,并生成 HTML 报告(默认在coverage/目录)
常用配置项(通过 nyc.config.js 或 package.json 的 nyc 字段)
默认行为适合多数场景,但常需微调:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
指定源码目录:用
include: ["src/**"]明确只分析源码,避免覆盖 node_modules 或测试文件 -
排除不测文件:用
exclude: ["src/index.js", "**/*.test.js"]跳过入口或测试文件 -
报告格式:设
reporter: ["html", "text", "lcov"],lcov便于集成 CI(如 Codecov) -
阈值检查:加
check-coverage参数或配置branches: 80, lines: 90,未达标时命令失败,强制提升覆盖率
与主流测试框架配合的关键点
NYC 本身不运行测试,而是“包裹”测试命令,所以适配取决于你的测试工具:
-
Jest:Jest 内置了覆盖率支持(
jest --coverage),底层也用 Istanbul。若想用 NYC 统一管理,可关掉 Jest 自带的:
在 Jest 配置中设collectCoverage: false,再用nyc jest -
Mocha:确保用
nyc mocha test/**/*.js,并注意 Mocha 版本兼容性(v9+ 推荐用--loader ts-node/esm配合 TypeScript) -
Vitest:原生支持覆盖率(
vitest run --coverage),但若需 Istanbul 报告风格,仍可用nyc vitest run(需 Vitest v0.34+)
查看和解读覆盖率报告
运行后打开 coverage/index.html 即可交互式浏览:
- Lines:行覆盖率 —— 每行是否至少被执行一次
- Functions:函数覆盖率 —— 每个声明的函数是否被调用过
- Branches:分支覆盖率 —— if/else、三元、逻辑运算符等所有可能路径是否都走过
- Statements:语句覆盖率(和 Lines 基本一致,但对多语句单行更敏感)
- 红色高亮表示未覆盖,点击文件可定位到具体哪一行/分支缺失
不复杂但容易忽略:确保测试真正执行了待测代码(比如异步逻辑要 await,React 组件要渲染并触发事件),否则覆盖率数字会失真。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










