前端JS分支覆盖率需稳定达90%以上,关键在于用精准测试用例覆盖未命中的分支路径,重点监控分支覆盖率(% Branch),优先补全高风险函数如支付、权限、校验等的逻辑盲区,并以最小输入触发隐藏分支。

前端 JS 核心模块覆盖率要稳定达到 90% 以上,关键不是堆测试数量,而是让每个测试用例精准命中一条未覆盖的分支路径。重点盯住分支覆盖率(% Branch),它比行或函数覆盖率更能暴露逻辑盲区——比如一个 if (a && b) 只跑了 true && true,那 false 分支就仍是盲区。
聚焦高风险函数的分支缺口
打开 Istanbul HTML 覆盖率报告,按 “Branch %” 倒序筛选,优先处理那些分支覆盖率明显低于语句覆盖率的文件。点进去看标红的行:
• if、switch、三元运算符、try/catch 所在位置
• 例如:if (user.role === 'admin' && user.status === 'active') 只覆盖了全真情况 → 补一个 role='admin' 但 status='pending' 的用例
• catch 块没执行 → 在测试中 mock 接口抛错,验证日志是否打点
• switch 缺少非主流程响应 → mock 返回 404 或 500,触发 default 或错误分支
按业务影响分级补测
不是所有未覆盖代码都值得投入。结合职责判断优先级:
• 支付、权限、数据校验类函数:分支覆盖必须 ≥95%,每条风控开关、重试逻辑、失败回滚路径都要有对应测试
• API 错误处理、表单校验、状态切换逻辑:覆盖空值、超长输入、非法字符、网络中断等常见异常场景
• 纯展示逻辑、默认值兜底(如 name || '未知')、埋点上报:可暂缓,或通过集成测试间接覆盖
用最小输入撬动隐藏路径
避免冗余用例,用最简数据命中目标分支:
• 对 if (a && b),只需两组:a=true, b=true(进 if)和 a=false, b=任意(跳过 if)
• 对 for (let i = 0; i ,准备空数组、<code>[{valid:true}]、[{valid:false}, {valid:true}] 三种输入
• 对含 getter 的 class:get count() { return this.items?.length ?? 0; },需测 this.items = null 和 this.items = [1,2]
闭环管理防止覆盖率倒退
把优化动作固化进开发流程:
• 在 CI 中配置 nyc check-coverage --branches 95(核心模块)和 --branches 80(其余模块),低于即阻断合并
• 每次 PR 描述中注明“本次修改涉及哪些分支逻辑,已补充对应测试”
• 每月导出衰减报告,识别连续 30 天未覆盖的函数,安排专项补测


















