Karma为角度项目生成包含无效行号的lcov报告

wim*_*nat 11 lcov browserify istanbul sonarqube karma-coverage

我有一个带有一些测试的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"
  }
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

对于我拥有的几乎每个js文件等等.

如果我生成一个html覆盖率报告,那么报告看起来很好,所以看起来正在生成报告.

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

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

有没有人设法获得与karma和browserify合作的lcov报道?

Miq*_*Miq 0

我想我找到了解决方案。我还没有测试过它,但阅读文档表明,这是正确的方法。

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

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

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

Angular 或多或少是 webpack + typescript。

这里提出了使用 istanbul Instrumenter loader 的相同解决方案: https: //www.linkedin.com/pulse/typescript-20-how-get- Correct-test-coverage-line-numbers-willem-liu

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