Evr*_*tar 33 javascript unit-testing code-coverage istanbul
我使用伊斯坦布尔代码覆盖AngularJS项目中的单元测试.有4种类型的报道,它们是
声明,功能和线路都没问题,但我不明白"分支"是什么.什么是分支?
Car*_*iel 34
分支是运行时可以选择是否可以采用一个或另一个路径的地方.让我们举个例子:
if(a) {
Foo();
}
if(b) {
Bar();
}
Yay();
Run Code Online (Sandbox Code Playgroud)
到达第一行时,它可以决定是否要进入if(a)
-statement 的主体内部.此外,它可以决定不这样做.在这个阶段,我们已经看到了两条路径(一条分支).
之后的下一个声明变得更有趣.它可以进入if
体内并执行Bar
.它也可以不这样做.但请记住,我们之前已经有了一个分支.如果Foo
被叫或不被调用,结果可能会有所不同.
所以我们最终有四条可能的路径:
Foo
,不打电话Bar
或者Foo
,不打电话Bar
Foo
,打电话Bar
Foo
和Bar
最后Yay
总是执行,不管是否Foo
还是Bar
被调用,所以不作为分支计数.所以上面的代码片段包含四个路径/两个分支(是否呼叫Foo()
,是否呼叫Bar()
).
与已经提到的其他答案一样,有许多语句可以导致分支(if
/ switch
).不要忘了有条件的循环,如while
/ for
/ do-while
,或短路(如&&
/ ||
),运营商无论是.
代码覆盖率工具希望确保您已经测试了所有分支.如果所有路径都经过测试,甚至是所有(边缘情况)值,而不仅仅是分支,那么最好.这样做,以确保不会执行任何不需要的行为.