如何阅读伊斯坦布尔保险报告?

我一直使用Jasmine进行单元测试,但最近我开始使用伊斯坦布尔为我提供代码覆盖率报告。我的意思是,我明白了他们试图告诉我的要点,但我真的不知道这些百分比中的每一个代表什么(Stmts,Branches,Funcs,Lines)。到目前为止,谷歌搜索我一直无法找到可靠的解释/资源。

问题:就像我说的,我明白它的要点,但是有人可以发布适当的解释或指向适当解释的链接吗?

第三个问题:有没有办法确定代码的哪些特定部分没有被覆盖?到目前为止,我还没有真正摸索这份报告,我基本上是猜测。

-------------------|-----------|-----------|-----------|-----------|
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 |
-------------------|-----------|-----------|-----------|-----------|

答案 1

有许多覆盖标准,主要有:

  • 功能覆盖是否调用了程序中的每个函数(或子例程)?
  • 报表覆盖范围程序中的每个语句都已执行吗?
  • 分支机构覆盖范围是否执行了每个控制结构的每个分支(也称为 DD 路径)(如 if 和 case 语句)?例如,给定一个 if 语句,是否同时执行了 true 和 false 分支?另一种说法是,程序中的每个边缘都被执行了吗?
  • 行覆盖率是否已执行源文件中的每个可执行行?

对于每种情况下,百分比表示已执行代码未执行代码,其等于百分比格式的每个分数(例如:50% 分支,1/2)。

在文件报告中:

  • 'E'代表“else path not take take”,这意味着对于标记的 if/else 语句,“if”路径已经过测试,但“else”已经过测试。
  • 'I'代表“如果路径未采取”,这是相反的情况:“如果”尚未经过测试。
  • 左列中的是该行的执行次数。xN
  • 未执行的行或代码段将以红色突出显示。

这已经在伊斯坦布尔v0.4.0中得到了验证,我不确定这是否仍然适用于后续版本,但是由于该库基于可靠的理论原则,因此对于较新版本,行为不应发生太大变化。

它还提供了一些颜色代码 -

粉红色:未涵盖的声明。

橙色:未覆盖的功能。

黄色:未覆盖的树枝。

完整的伊斯坦布尔文档在这里:

https://istanbul.js.org

有关代码覆盖率的更深入理论:

https://en.wikipedia.org/wiki/Code_coverage

希望它有帮助!


答案 2

运行 istanbul 还应为报告生成一个 HTML 文件(应位于 coverage 文件夹中)。当您单击文件/文件夹时,此HTML应该为您提供向下钻取信息。

所涵盖的函数百分比由测试期间调用的函数数除以函数总数计算。行和语句也是如此(除非您有很长的语句,否则它们通常彼此靠近)。分支意味着像块一样的决策点。例如,假设您的代码只包含一个语句,并且您的测试仅通过部分而不通过该部分,那么您的分支百分比应为50%。if-elseif-elseifelse

希望这能让事情变得更清晰。