Javascript 我如何阅读伊斯坦布尔报道?
我总是在单元测试中使用Jasmine,但最近我开始使用伊斯坦布尔为我提供代码覆盖率报告。我的意思是我知道他们想告诉我的要点,但我真的不知道每个百分比代表什么(STMT、分支、函数、行)。到目前为止,我在谷歌上找不到可靠的解释/资源 问题:就像我说的,我明白了它的要点,但是有人能发布一个正确的解释或一个正确解释的链接吗 第三个问题:有没有办法确定代码中哪些特定部分没有涵盖?到目前为止,我基本上是在猜测这个报告Javascript 我如何阅读伊斯坦布尔报道?,javascript,testing,jasmine,code-coverage,istanbul,Javascript,Testing,Jasmine,Code Coverage,Istanbul,我总是在单元测试中使用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分支?另一种说法是,程序中的每一条边都被执行了吗
- 行覆盖率是否执行了源文件中的每个可执行行
代表“未采用的else路径”,这意味着对于标记的if/else语句,“if”路径已被测试,而不是“else”'E'
代表“如果未采取路径”,这是相反的情况:“如果”未经测试'I'
- 左栏中的
是该行已执行的次数xN
- 未执行的行或代码段将以红色突出显示
希望有帮助 添加到前面的答案中 %的陈述是根据您的测试所涵盖的陈述数量的百分比计算的,例如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%。我是如何从纽约顺便说一句得到这些结果的,但原理是一样的,对吗?