Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何阅读伊斯坦布尔报道?_Javascript_Testing_Jasmine_Code Coverage_Istanbul - Fatal编程技术网

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

Javascript 我如何阅读伊斯坦布尔报道?,javascript,testing,jasmine,code-coverage,istanbul,Javascript,Testing,Jasmine,Code Coverage,Istanbul,我总是在单元测试中使用Jasmine,但最近我开始使用伊斯坦布尔为我提供代码覆盖率报告。我的意思是我知道他们想告诉我的要点,但我真的不知道每个百分比代表什么(STMT、分支、函数、行)。到目前为止,我在谷歌上找不到可靠的解释/资源 问题:就像我说的,我明白了它的要点,但是有人能发布一个正确的解释或一个正确解释的链接吗 第三个问题:有没有办法确定代码中哪些特定部分没有涵盖?到目前为止,我基本上是在猜测这个报告 -------------------|-----------|-----------|

我总是在单元测试中使用Jasmine,但最近我开始使用伊斯坦布尔为我提供代码覆盖率报告。我的意思是我知道他们想告诉我的要点,但我真的不知道每个百分比代表什么(STMT、分支、函数、行)。到目前为止,我在谷歌上找不到可靠的解释/资源

问题:就像我说的,我明白了它的要点,但是有人能发布一个正确的解释或一个正确解释的链接吗

第三个问题:有没有办法确定代码中哪些特定部分没有涵盖?到目前为止,我基本上是在猜测这个报告

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

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

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


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

有很多保险标准,主要有:

  • 函数覆盖率是否调用了程序中的每个函数(或子例程)
  • 语句覆盖率程序中的每个语句是否都已执行
  • 分支覆盖率是否执行了每个控制结构(如if和case语句)的每个分支(也称为DD路径)?例如,给定一个if语句,是否同时执行了true和false分支?另一种说法是,程序中的每一条边都被执行了吗
  • 行覆盖率是否执行了源文件中的每个可执行行
对于每种情况,百分比表示执行代码与未执行代码,其等于百分比格式中的每个分数(例如:50%分支,1/2)

在文件报告中:

  • 'E'
    代表“未采用的else路径”,这意味着对于标记的if/else语句,“if”路径已被测试,而不是“else”
  • 'I'
    代表“如果未采取路径”,这是相反的情况:“如果”未经测试
  • 左栏中的
    xN
    是该行已执行的次数
  • 未执行的行或代码段将以红色突出显示
这已经在伊斯坦布尔v0.4.0中得到了验证,我不确定这是否仍然适用于后续版本,但由于该库基于坚实的理论原则,对于较新版本,行为不应该有太大的变化

它还提供一些颜色代码-

粉红色:未涵盖声明

橙色:未涵盖功能

黄色:未覆盖树枝

全文如下:

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


希望有帮助

添加到前面的答案中

%的陈述是根据您的测试所涵盖的陈述数量的百分比计算的,例如12/18*100=66.67%。这意味着你的测试只覆盖了66.67%

%分支的计算方法也相同。您的%函数和 %台词

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


我希望这有助于您更好地理解它。

运行伊斯坦布尔还应该为报告生成一个HTML文件(应该在coverage文件夹中)。当您单击files/foldersThanks@yarons时,这个HTML应该为您提供深入的信息。这无疑有助于深入了解覆盖范围,并明确哪些内容没有被覆盖。我仍然无法深入理解百分比的含义=/。我在伊斯坦布尔运行时,在
package.json
中指定了
“test”:“nyc mocha”
。我的覆盖文件夹是空的。想法?我补充说。现在可以了
“test”:“nyc--reporter=html mocha”
例如:如果您有一个大的if分支和一个小的else分支,并且只运行了if分支,那么线路覆盖率看起来会很好,但分支覆盖率仍然只有50%。此外,如果语句用分号分隔,或者如果该行包含函数定义(其中包含自己的语句),则每行可以有多个语句。如果语句在最后分号之前有换行符,则每个语句可以有多行。我不明白的是,它如何能够在同一个文件上提供100%的语句覆盖率,但小于100%的函数对流。如果不是所有的函数都被调用了,怎么可能100%的语句都被覆盖了呢??例如,我在我的报道中看到了这一行:
index.js | 100 | 100 | 87.5 | 100 |
其中列的顺序是
File |%Stmts |%Branch |%Funcs |%Lines | uncover line | s
。所以100%的报表覆盖率,没有未覆盖的行。但功能覆盖率仅为87.5%。我是如何从纽约顺便说一句得到这些结果的,但原理是一样的,对吗?