Javascript Jest coverage以一种奇怪的方式仅缺少if条件行-为什么以及如何修复

Javascript Jest coverage以一种奇怪的方式仅缺少if条件行-为什么以及如何修复,javascript,jestjs,enzyme,Javascript,Jestjs,Enzyme,我有一个index.js,看起来像 ... [line 69] if A: [line 70] foo() [line 71] else if B: [line 72] bar() 我已经为69-70行写了一个测试,证据是如果我把它注释掉,纱线测试——覆盖率将显示69-70行缺失 然而,即使进行了此测试,覆盖率仍会抱怨第69行丢失 我注意到的另一件事是,如果我将if条件交换为 ... [line 69] if B: [line 70] bar() [line 71] else

我有一个index.js,看起来像

...
[line 69] if A:
[line 70]    foo()
[line 71] else if B:
[line 72]    bar()
我已经为69-70行写了一个测试,证据是如果我把它注释掉,纱线测试——覆盖率将显示69-70行缺失

然而,即使进行了此测试,覆盖率仍会抱怨第69行丢失

我注意到的另一件事是,如果我将if条件交换为

...
[line 69] if B:
[line 70]    bar()
[line 71] else if A:
[line 72]    foo()
它仍然是第69行在覆盖范围内丢失


开玩笑的原因是什么?我该如何解决这个问题呢?

这里实际上有三个分支:如果触发了
,则执行
;如果触发了
,则执行
,否则执行,或者两者都不执行


即使后一种情况在本例中是空的(因为没有
else
语句),您仍然需要一个测试,其中
if
else if
都不会被触发以实现完全覆盖。

这在JavaScript中无效…如果您指的是括号-它们是psedo代码,有关Logic的更多信息您可以共享
A
B
?他们都在同一条线上?我无法重现那个问题。如果
A
类似于
(true | |(()=>true)()
,并且它在自己的线路上,那么它将被报告为未发现,但是如果整个情况在同一线路上,我无法重新创建问题。嗨,Brain,谢谢你的回答。我找到了原因。我没有一个
else
条款来涵盖其余部分。if和else if实际上都已涵盖。但是应该有一些东西来覆盖REST,即使else语句丢失且为空,您仍然需要为
启动一个测试!A&&!B
,这将触发伊斯坦布尔标准上的else空分支。