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

Posted

技术标签:

【中文标题】如何更改 Karma 执行的 LCOV 报告的格式?【英文标题】:How to change the format of the LCOV report executed by Karma? 【发布时间】:2015-05-02 14:14:34 【问题描述】:

我已将 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

不幸的是,the Sonarqube JavaScript plugin 只考虑以SF:DA:BRDA: 开头的行(参见LCOVParser)。

因此,LCOV HTML 报告(由伊斯坦布尔制作)在相同数据上为我提供了比 Sonar 更高的代码覆盖率。

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


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

BRFBRHBRDA 用于分支机构FNFNFFNHFNDA 用于函数LNLFLH 用于*F 是总数,*H 是覆盖信息。

Istanbul 和 Sonar 覆盖范围之间的差异似乎是由于后者完全忽略了 Functions 和 Branches 覆盖范围。

有什么办法解决这个问题吗?

【问题讨论】:

您是否考虑过使用 karma-sonarqube-unit-reporter:npmjs.com/package/karma-sonarqube-unit-reporter 我们也遇到了这个问题,然后放弃了直接运行脚本的 javascript 插件。 github.com/carsdotcom/gulp-sonar 是一个不错的插件,可用于您的 gulpfile。它可能不适用于所有情况,但为我们解决了这个问题。 我们遇到了类似的问题,声纳需要一个绝对文件路径来计算覆盖率。我们的解决方法是添加一个修改 lcov.info 的构建任务,以在 SF:lines 上添加绝对路径前缀 你成功了吗?我坚持使用无法解析文件路径的 lcov 导入,此处解释为 ***.com/questions/51878860/… @claya,如果您更新构建任务详细信息会很有帮助。所以我可以按照同样的方法来看看它是否有效。我们正在使用团队城市 【参考方案1】:

您可以运行以下脚本: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

【讨论】:

以上是关于如何更改 Karma 执行的 LCOV 报告的格式?的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube 没有从 lcov 读取 javascript 测试覆盖率

SonarQube 和 Lcov 报告无法解析文件路径

声纳覆盖率:lcov 覆盖率报告中的文件路径不正确

Sonarqube 默认覆盖范围为 0,来自具有绝对路径的 Karma Coverage LCOV 文件

lcov.info 没有被 sonarqube 扫描

如何让lcov执行得更快?