测试复杂条件分支需覆盖所有真假路径,Jest的%Branch覆盖率低于90%即存在遗漏;须逐一验证if/else、switch、三元、&&/||、try/catch等分支,结合边界值与异常组合,并通过覆盖率报告反向补全未覆盖分支。

测试复杂条件分支,核心是让每个真假路径都被执行到,而不是只测“看起来能跑通”的场景。Jest 的覆盖率报告里 % Branch 是关键指标,低于 90% 就说明有分支被跳过——这些地方最容易藏 bug。
识别所有分支点,一个都不能漏
别只盯着 if/else。以下每一处都是独立分支,必须分别覆盖:
- if、else if、else:每个分支单独写用例,尤其注意 else 是否真被触发(比如传个非法值)
- switch 的每个 case 和 default:哪怕 status 是字符串,也要试 'loading'、'error'、'unknown' 三种
- 三元运算符 ? ::左边条件为 true 和 false 各一组输入
-
&& 和 || 的左右操作数:比如
a > 0 && b != null,需覆盖 a>0/b=null、a≤0/b!=null、a>0/b!=null 等组合 - try/catch:必须同时模拟 resolve 和 reject(或 throw)两种结果
专攻边界和异常组合,不是只测“正常”
多数分支遗漏发生在输入边缘或状态突变时,不能靠直觉猜:
- 对字符串参数,试
''、' '、null、undefined、123(类型错) - 对数组处理,用
[](空)、[1](单)、[1,2,3](多)验证循环是否进入、执行几次、是否会越界 - 权限或请求逻辑,必须覆盖 token 有效 / token 过期(401)/ 网络失败(fetch 抛错)三种状态
- 对象属性访问如
user?.profile?.city === '北京',要测user = null、user = { profile: null }、user = { profile: { city: '北京' } }
用 Jest 覆盖率报告反向驱动补漏
运行 npm test -- --coverage 后打开 HTML 报告,重点看三处:
立即学习“Java免费学习笔记(深入)”;
- 行号旁的红色标记:代表该行所在分支完全没被执行(不只是某一行没跑,是整个 true 或 false 路径缺失)
- 同一文件中 % Branch 明显低于 % Lines:说明代码行都跑了,但判断只走了一边
- 点击函数详情,检查每个 if 右侧是否显示 “2/2 branches covered”;出现 “1/2” 就得立刻补用例
别绕过私有逻辑和 getter/setter
class 内部的私有方法(#method)、含判断的 getter/setter、静态方法,同样有分支,不能指望“调 public 方法就顺带覆盖了”:
- 私有方法需确保 public 入口能真正进入其内部 if 或 throw 分支
- getter 如
get count() { return this.items?.length ?? 0 },必须测this.items = null和this.items = [1] - setter 如
set age(val) { if (val < 0) throw new Error('年龄不能为负') },必须写一个抛错的测试用例


















