JavaScript单元测试的代码覆盖范围是什么?

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
  • 打电话给FooBar

最后Yay总是执行,不管是否Foo还是Bar被调用,所以不作为分支计数.所以上面的代码片段包含四个路径/两个分支(是否呼叫Foo(),是否呼叫Bar()).

与已经提到的其他答案一样,有许多语句可以导致分支(if/ switch).不要忘了有条件的循环,如while/ for/ do-while,或短路(如&&/ ||),运营商无论是.

代码覆盖率工具希望确保您已经测试了所有分支.如果所有路径都经过测试,甚至是所有(边缘情况)值,而不仅仅是分支,那么最好.这样做,以确保不会执行任何不需要的行为.

  • 谢谢你的详细解答. (2认同)

Jam*_*rpe 8

代码可以采用多条路线的地方,即它的分支。分支语句的几个例子是if/elseswitch语句。

分支覆盖跟踪哪些分支已被执行,因此您可以确保正确测试所有路由。