12

我有一个带有一些测试的 Angular 项目。我的构建是用 Gulp 编写的。我使用 Karma 运行测试并生成 lcov 报告。

然后我使用 gulp-sonar 插件来运行 Sonar。我的声纳配置如下所示:

"sonar": {
  "host": {
    "url": "http://mysonar.example.com.au"
  },
  "projectKey": "sonar:advertising-test",
  "projectName": "advertising-test",
  "projectVersion": "1.0.0",
  "sources": "app/js",
  "javascript": {
    "lcov": {
      "reportPath": "reports/coverage/lcov.info"
    }
  },
  "exec": {
    "maxBuffer": "1048576"
  }
}

Sonar 运行并分析代码,但在尝试使用以下内容读取 lcov 报告时失败:

[09:38:58] 09:38:58.322 WARN  - Problem during processing LCOV report: can't save DA data for line 0.
java.lang.IllegalArgumentException: Line with number 0 doesn't belong to file app/js/main.js
...    
[09:38:58] 09:38:58.324 WARN  - Problem during processing LCOV report: can't save DA data for line 65.
java.lang.IllegalArgumentException: Line with number 65 doesn't belong to file app/js/constants.js

对于我拥有的几乎每个 js 文件,依此类推。

如果我生成一个 html 覆盖率报告,那么该报告看起来不错,因此似乎该报告正在正确生成。

我想知道这是否是由我使用的 karma-browserify 步骤引起的。

有人可以帮助我的 lcov 报告错误吗?

有没有人设法获得与 karma 和 browserify 一起使用的 lcov 覆盖率报告?

4

1 回答 1

0

我想我找到了解决方案。我尚未对其进行测试,但阅读文档表明这是正确的方法。

首先,问题不在于声纳,而在于业力。您的覆盖率报告是为处理过的打字稿文件构建的,因此是行问题。

查看有关 karma-coverage-istanbul-reporter npm 包描述的文档(粗体来自我):

这只是一个报告器,不会执行代码的实际检测。Babel 用户应该使用 istanbul babel 插件来检测你的代码,webpack + typescript 用户应该使用 istanbul-instrumenter-loader然后使用这个 karma 报告器来做实际的报告。有关如何组合它们的 e2e 示例,请参阅测试配置。

Angular 或多或少是 webpack + typescript。

此处建议使用相同的解决方案,以使用 istanbul 仪器加载程序:https ://www.linkedin.com/pulse/typescript-20-how-get-correct-test-coverage-line-numbers-willem-liu

我建议我们应该重新配置我们的 karma 配置以生成正确的 lcov.info 文件并查看结果。

于 2018-09-28T21:46:35.390 回答