我如何阅读伊斯坦布尔报道?

我一直使用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%。

希望让事情更清楚。