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,不打电话BarFoo,打电话BarFoo和Bar最后Yay总是执行,不管是否Foo还是Bar被调用,所以不作为分支计数.所以上面的代码片段包含四个路径/两个分支(是否呼叫Foo(),是否呼叫Bar()).
与已经提到的其他答案一样,有许多语句可以导致分支(if/ switch).不要忘了有条件的循环,如while/ for/ do-while,或短路(如&&/ ||),运营商无论是.
代码覆盖率工具希望确保您已经测试了所有分支.如果所有路径都经过测试,甚至是所有(边缘情况)值,而不仅仅是分支,那么最好.这样做,以确保不会执行任何不需要的行为.