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

时间:2014-10-28 20:52:36

标签: testing jasmine code-coverage karma-jasmine istanbul

我一直使用Jasmine进行单元测试,但最近我开始使用Istanbul来给我代码覆盖报告。我的意思是我得到了他们试图告诉我的 gist ,但我不知道每个百分比代表什么(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 |
-------------------|-----------|-----------|-----------|-----------|

3 个答案:

答案 0 :(得分:154)

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

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

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

在文件报告中:

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

这已经在伊斯坦布尔v0.4.0中得到验证,我不确定这是否仍适用于后续版本,但由于该库是基于坚实的理论原则,对于较新的行为不应该改变太多行为版本

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

粉红色:未涵盖的陈述。

橙色:功能未涵盖。

黄色:未覆盖分支。

完整的伊斯坦布尔文档:

https://gotwarlost.github.io/istanbul/public/apidocs/index.html

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

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

希望它有所帮助!

答案 1 :(得分:6)

运行istanbul还应该为报告生成一个HTML文件(应该在coverage文件夹中)。当您单击文件/文件夹时,此HTML应该为您提供深入信息。

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

希望能让事情更清晰。

答案 2 :(得分:0)

添加到先前的答案

%Statements是通过占测试覆盖的语句数的百分比来计算的,例如12/18 * 100 = 66.67%。这意味着您的测试仅涵盖66.67%。

%Branch也以相同的方式计算。对您的%Function和 %lines。

在项目根目录中,有一个coverage文件夹,其中包含测试的HTML输出。单击它,然后在浏览器中查看。您应该会看到类似的内容

Image showing the output of your test results

我希望这可以帮助您更好地理解它。