JavaScript中分支覆盖率和行覆盖率可通过nyc、Jest、Vitest等工具获取:nyc默认支持并高亮未覆盖分支;Jest需配置coverageReporters并运行--coverage;Vitest推荐c8,支持终端与HTML双端展示Lines/Braches数据。

在 JavaScript 代码覆盖率中,分支覆盖率(Branch Coverage)和行覆盖率(Line Coverage)通常通过测试运行时集成代码覆盖率工具(如 istanbul/nyc 或 Vitest、Jest)来获取,它们会生成结构化的覆盖率报告,其中明确区分这两类指标。
使用 nyc(istanbul)查看分支与行覆盖率
nyc 是最常用的 JS 覆盖率工具之一,默认支持行、函数、分支、语句四种覆盖率统计。运行测试后生成的 HTML 报告中会清晰展示每类覆盖率数值及高亮源码。
- 安装并配置:
npm install --save-dev nyc,在package.json中添加"nyc"字段或使用.nycrc配置文件,确保branches: true(默认开启) - 运行命令:
nyc npm test(假设测试脚本为test),完成后自动生成coverage/目录 - 打开
coverage/index.html,在顶部汇总栏看到类似:
Lines: 92.5% (120/130) —— 行覆盖率
Branches: 78.3% (36/46) —— 分支覆盖率 - 点击具体文件,红色标记未执行的行,黄色标记部分覆盖的分支(例如
if/else只走了if没走else)
在 Jest 中启用并查看分支覆盖率
Jest 内置基于 istanbul 的覆盖率支持,但分支覆盖率默认不显示在终端摘要中,需通过报告文件或配置显式启用。
- 确保
jest.config.js包含:collectCoverage: truecoverageReporters: ['html', 'text-summary'] - 运行
jest --coverage,终端会输出简要 summary,其中包含Branches一行(如Branches: 85.71% (6/7)) - HTML 报告中每个文件详情页右侧有独立的 “Branches” 列表,点击可跳转到未覆盖的分支逻辑处(如三元表达式、逻辑与/或短路分支)
识别常见分支覆盖场景
分支覆盖率关注的是条件判断中所有可能路径是否都被执行过,不是“有没有进 if”,而是“if 和 else 是否都跑了”、“&& 左右两边是否都为真/假触发了不同路径”。
立即学习“Java免费学习笔记(深入)”;
-
if (a && b) { ... }:共 3 个分支(a 为假;a 为真且 b 为假;a 和 b 都为真) -
return x > 0 ? 'pos' : 'non-pos';:2 个分支(true / false) -
switch (val) { case 1: ...; case 2: ...; default: ... }:每个case和default算一个分支 - 未覆盖分支在 HTML 报告中常标为黄色背景,悬停提示 “branch not covered”
用 Vitest 查看分支与行覆盖率
Vitest 基于 c8 或 istanbul(推荐 c8,默认更快),同样支持多维度覆盖率输出。
- 安装
c8:npm install -D c8,然后运行:npx c8 vitest run --coverage - 或直接使用 Vitest 内置覆盖率:
vitest run --coverage(需安装vitest/coverage-istanbul或vitest/coverage-c8) - 生成的 HTML 报告结构与 nyc 一致,顶部汇总栏和文件明细页均分别列出 Lines / Branches 覆盖率
- 终端输出中也会显示类似:
✓ Lines: 94.23% (123/130)
⚠ Branches: 66.67% (20/30)


















