【发布时间】:2016-05-04 06:19:51
【问题描述】:
【问题讨论】:
标签: javascript unit-testing code-coverage istanbul
【问题讨论】:
标签: javascript unit-testing code-coverage istanbul
分支是运行时可以选择是否采用一条路径或另一条路径的地方。举个例子:
if(a) {
Foo();
}
if(b) {
Bar();
}
Yay();
当到达第一行时,它可以决定是否要进入if(a)-statement 的主体。此外,它可以决定不这样做。在这个阶段,我们已经看到了两条路径(一个分支)。
之后的下一个语句变得更有趣。它可以进入if 主体并执行Bar。它也不能那样做。但请记住,我们之前已经有一个分支。如果Foo 被调用,结果可能会有所不同。
所以我们最终得到了四种可能的路径:
Foo,也不打电话给Bar
Foo,不呼叫Bar
Foo,调用Bar
Foo 和Bar
最后一个Yay 总是被执行,不管是Foo 还是Bar 被调用,所以这不算作一个分支。所以上面的代码sn-p包含四个路径/两个分支(调用Foo()与否,调用Bar()与否)。
就像已经提到的其他答案一样,有许多语句可能导致分支 (if/switch)。一些(但不是全部)包括:
while/for/do-while)break 或 continue 声明&&/||)
foo && bar,如果foo 是false,则不必评估bar。同样对于foo || bar,如果foo 是true,bar 也不必进行评估。function A(someVar = []) { ... })
if-语句。对于此方法的每次调用,都会检查参数是否为undefined。如果是,则为someVar 设置默认参数(对于上面的示例)。这会导致分支存在。代码覆盖率工具希望确保您已经测试了所有分支。最好的情况是所有路径都经过测试,甚至所有(边缘情况)值,而不仅仅是分支。这是为了确保不会执行不需要的行为。
【讨论】:
let actualVar = someVar || [] 相同。所以基本上它是“使用[ ] IF someVar 是undefined”。但如果你能检查一下就好了:)
来自Wikipedia:
是否每个控制结构(例如 if 和 case 语句)的每个分支(也称为 DD 路径)都已执行?例如,给定一个 if 语句,是否同时执行了 true 和 false 分支?另一种说法是,程序中的每一条边都被执行了吗?
您必须为每个控制结构测试所有可能的情况(在 if 语句、f.e. 和 switch 的所有情况下输入/不输入)。分支覆盖率是衡量(通常以百分比表示)测试覆盖的总分支数量的指标。
【讨论】:
代码可以采用多条路径的地方,即它的分支。分支语句的几个示例是 if/else 和 switch 语句。
分支覆盖跟踪哪些分支已执行,因此您可以确保正确测试所有路由。
【讨论】: