js单元测试中用nyc(istanbul)测覆盖率,需插桩收集数据并生成报告;支持jest/mocha/vitest,jest内置但需启用--coverage;html报告显行/分支覆盖率,红色标未执行行,黄色标部分分支;vite可配vite-plugin-istanbul实时查看。

在 JS 单元测试中使用 Istanbul(现主流为 nyc)查看覆盖率,核心是让测试运行时自动插桩、收集执行数据,并生成可读报告。它不依赖特定测试框架,但需与 Jest、Mocha 或 Vitest 等协同工作。
安装与基础命令
推荐以项目依赖方式安装 nyc(Istanbul 的现代 CLI 工具):
- npm install --save-dev nyc
- 若用 Jest,无需额外安装 istanbul,因 Jest 内置支持;但需显式启用覆盖率收集
- 运行测试并生成默认报告:nyc npm test(假设
test是你的测试脚本) - 报告会输出到
coverage/目录,默认含 HTML 和文本摘要
快速查看关键指标:行与分支覆盖率
HTML 报告首页顶部汇总栏直接显示两类核心数据:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
- Lines: X% (A/B) —— 行覆盖率:已执行的有效代码行数占比
-
Branches: Y% (C/D) —— 分支覆盖率:所有条件分支(如
if/else、三元运算、switch case)中被触发的分支数占比 - 点击具体文件,红色标记未执行的行,黄色背景高亮“部分覆盖”的分支(例如只走了
if没走else)
配合 Jest 使用(最常见场景)
Jest 默认开启行覆盖率,但分支覆盖率需确认配置生效:
- 在
jest.config.js中设置:collectCoverage: true - 指定报告格式:
coverageReporters: ['html', 'text-summary'] - 确保
collectCoverageFrom包含源码路径(如src/**/*.{js,ts}),并排除类型定义和 node_modules - 运行:
jest --coverage或使用 npm 脚本:"test:coverage": "jest --coverage"
本地开发中实时观察(非等测试跑完)
想边写测试边看覆盖变化?可借助轻量方案:
- Vite 项目:装
vite-plugin-istanbul,启动 dev server 后访问http://localhost:3000/__coverage__查看实时面板 - 浏览器 DevTools:打开 Coverage 面板(More Tools → Coverage),刷新页面即看到 JS 文件中已执行(蓝色)与未执行(红色)字节范围
- VS Code 插件:如 “Coverage Gutters”,自动解析
coverage/coverage-final.json,在编辑器左侧标出未覆盖行










