我如何阅读伊斯坦布尔报道?
我一直使用Jasmine进行unit testing,但最近我开始使用Istanbul来给我提供代码覆盖率报告。 我的意思是我明白了他们想要告诉我的要点 ,但是我不知道每个百分比代表什么(Stmts,Branches,Funcs,Lines)。 到目前为止谷歌search我一直无法find一个坚实的解释/资源。
问题 :就像我说的那样,我能得到它的要点,但是可以有人发布一个正确的解释或链接到一个正确的解释?
第三个问题 :有什么方法可以确定你的代码的哪些部分不被覆盖? 到目前为止没有真正grokking这个报告,我基本上猜测。
-------------------|-----------|-----------|-----------|-----------| File | % Stmts |% Branches | % Funcs | % Lines | -------------------|-----------|-----------|-----------|-----------| controllers/ | 88.1 | 77.78 | 78.57 | 88.1 | dashboard.js | 88.1 | 77.78 | 78.57 | 88.1 | -------------------|-----------|-----------|-----------|-----------| All files | 88.1 | 77.78 | 78.57 | 88.1 | -------------------|-----------|-----------|-----------|-----------|
有一些覆盖标准,主要是:
- 函数覆盖程序中的每个函数(或子例程)是否被调用?
- 声明范围程序中的每个声明是否已经执行?
- 分支覆盖每个控制结构(如if和case语句)的每个分支(也称为DD-path)是否已经执行? 例如,给定一个if语句,真假分支都被执行了吗? 另一种说法是,程序中的每一项优势都被执行了吗?
- 行覆盖已经执行源文件中的每个可执行行?
对于每种情况,百分比表示执行的代码与未执行的代码 ,它们以百分比格式(例如:50%分支,1/2)等于每个分数。
在文件报告中:
-
'E'
代表“其他path不被采用”,这意味着对于标记的if / else语句,“if”path已经被testing,但不是“其他”。 -
'I'
代表“如果不采取行动”,这是相反的情况:“如果”没有经过testing。 - 左列中的
xN
是该行被执行的次数。 - 未执行的行或代码将以红色突出显示。
这已经在伊斯坦布尔v0.4.0validation,我不确定这是否仍然适用于后续版本,但作为该库是基于坚实的理论原则,行为不应该改变太多,为新版本。
它还提供了一些颜色代码 –
粉红色 :没有涵盖的陈述。
橙色 :function不覆盖。
黄色 :没有覆盖的分支。
伊斯坦布尔文档全文如下:
https://gotwarlost.github.io/istanbul/public/apidocs/index.html
有关代码覆盖的更深入的理论:
https://en.wikipedia.org/wiki/Code_coverage
希望能帮助到你!
运行伊斯坦布尔也应该产生报告的HTML文件(应该在覆盖文件夹中)。 当你点击文件/文件夹时,这个HTML应该给你深入的信息。
覆盖函数的百分比是通过在testing期间调用的函数的数量除以函数的总数来计算的。 线条和语句也是如此(除非你有很长的语句,否则通常会彼此接近)。 分支意味着像if-else
块这样的决策点。 例如,假设你的代码只包含一个if-else
语句,而你的testing只通过if
部分而不是else
部分,那么你的分支比例应该是50%。
希望让事情更清楚。