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

我一直使用 Jasmine 进行单元测试,但最近我开始使用土耳其语提供代码覆盖率报告。我的意思是我得到了他们试图告诉我的 大意,但是我并不真正知道这些百分比代表什么(Stmts,Branch,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 |
-------------------|-----------|-----------|-----------|-----------|
48599 次浏览

运行伊斯坦布尔也应该为报告生成一个 HTML 文件(应该在覆盖文件夹中)。当您点击文件/文件夹时,这个 HTML 应该会给您提供深入的信息。

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

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

有一些覆盖标准,主要是:

  • 函数覆盖率 程序中的每个函数(或子例程)都被调用了吗?
  • 语句覆盖 程序中的每个语句都被执行了吗?
  • 每个控制结构(例如 if 和 case 语句)的每个分支(也称为 DD 路径)是否已经执行?例如,给定一个 if 语句,是否同时执行了 true 和 false 分支?换句话说,程序中的所有边都被执行了吗?
  • 行覆盖率 源文件中的每个可执行行是否已被执行?

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

在档案报告中:

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

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

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

粉红色 : 未覆盖的声明。

Orange : 未覆盖函数。

黄色 : 没有被覆盖的树枝。

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

Https://istanbul.js.org

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

Https://en.wikipedia.org/wiki/code_coverage

希望能有帮助!

加上之前的答案

语句的计算方法是从测试覆盖的语句数量中提取一个百分比,例如12/18 * 100 = 66.67% 。这意味着您的测试只覆盖了66.67% 。

分支也是以相同的方式计算的 % 行。

在项目根目录中,有一个覆盖率文件夹,其中包含测试的 HTML 输出。点击它并在浏览器中查看。你应该看看这个

显示测试结果输出的图像

我希望这能帮助你更好地理解它。

@ StijndeWitt: 是你问的

我不明白的是为什么它可以给我100% 的报道,但是 少于100% 的函数会聚在同一个文件上 即使不是所有函数,也已经覆盖了语句的百分比 叫什么?

附加的截图说明了如何线覆盖率可以是100% ,但功能覆盖率较少。 第4、5和7行算作行。第3行中包含函数定义(F1)的那一行没有,但它显然包含一个函数。 第5行还包含一个函数(F2)和一条附加语句。 因此,在纽约的数字世界里:

  • 行 = 3
  • 语句 = 4(其中1个不包括在内)
  • 函数 = 2(其中1个不包括在内)

显然,函数头并不算作“行”,但它们确实算作一个函数。这解释了为什么行覆盖率可以是100% ,而函数覆盖率(或语句覆盖率)是较少的。 Function coverage is less than 00%