如何更改Karma执行的LCOV报告格式?

41

我已经配置了Karma以报告我的JavaScript代码的覆盖率。以下是在karma.conf.js文件中的配置部分:

coverageReporter: {
  reporters: [
    {
      type: 'html',
      dir: 'build/karma/coverage'
    },
    {
      type: 'lcov',
      dir: 'build/karma/coverage',
      subdir: '.'
    },
    {
      type: 'cobertura',
      dir: 'build/karma/coverage'
    }
  ]
},

我的lcov.info文件具有以下格式:

TN:
SF:./app/scripts/app.js
FN:16,(anonymous_1)
FN:26,(anonymous_2)
FNF:2
FNH:1
FNDA:1,(anonymous_1)
FNDA:0,(anonymous_2)
DA:2,1
DA:20,1
DA:29,0
DA:34,0
LF:4
LH:2
BRF:0
BRH:0
end_of_record

很遗憾,Sonarqube JavaScript插件只考虑以SF:DA:BRDA:开头的行(参见LCOVParser)。

因此,由Istanbul生成的LCOV HTML报告给出的代码覆盖率比Sonar在相同数据上高。

有没有办法更改生成的lcov.info格式?


如果我查看 Istanbul代码,我可以想象不同标签的含义:

  • BRFBRHBRDA是用于分支
  • FNFNFFNHFNDA是用于函数
  • LNLFLH是用于
  • *F是总计,而*H是已覆盖的信息。

似乎Istanbul和Sonar之间覆盖率差异的原因是后者完全忽略了函数和分支覆盖率。

有什么解决办法吗?


你考虑过使用 karma-sonarqube-unit-reporter 吗?https://www.npmjs.com/package/karma-sonarqube-unit-reporter - DevDig
我们也遇到了这个问题,然后放弃了运行脚本的JavaScript插件,直接运行脚本。https://github.com/carsdotcom/gulp-sonar是一个很好的插件,可以用于您的gulpfile。它可能不适用于每种情况,但对我们解决了这个问题。 - devilfart
1
我们曾经遇到过类似的问题,其中Sonar期望使用绝对文件路径来计算覆盖率。我们的解决方法是添加一个构建任务,修改lcov.info文件,在SF:行上添加绝对路径前缀。 - claya
是的,我们也遇到了绝对/相对路径问题。因此,在运行测试之后(并在 Sonar 之前),我们只需添加一个一行的“sed”脚本来修复路径。 - Serhii Matrunchyk
顺便说一下,他们已经修复了分支:https://github.com/SonarSource/SonarJS/commit/d60a53eefc41f7c6a620b8c8d30a89fa590d0809 - Serhii Matrunchyk
显示剩余2条评论
1个回答

4
您可以运行一个脚本,执行以下操作:cat lcov.info | egrep "^(SF|DA|BRDA):" > lcov.info.new; mv lcov.info.new lcov.info
这样做的结果是:
SF:./app/scripts/app.js
DA:2,1
DA:20,1
DA:29,0
DA:34,0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接