Karma 为具有无效行号的 Angular 项目生成 lcov 报告
Posted
技术标签:
【中文标题】Karma 为具有无效行号的 Angular 项目生成 lcov 报告【英文标题】:Karma produces lcov report for angular project with invalid line numbers 【发布时间】:2016-10-02 21:39:39 【问题描述】:我有一个带有一些测试的 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 覆盖率报告?
【问题讨论】:
你觉得SonarQube端有问题吗?你得到的错误对我来说似乎很清楚。撇开 SonarQube 不谈,我认为问题在于了解如何获得包含无效行号的报告。 我也有这个。使用 Sonar 5.3 时工作正常,现在升级到 Sonar 5.6 时我得到了这个。 同样的问题,你用的是 ES6 吗? 你找到解决这个问题的方法了吗? 【参考方案1】:我想我找到了解决方案。我尚未对其进行测试,但阅读文档表明这是正确的方法。
首先,问题不在于声纳,而在于业力。您的覆盖率报告是针对已处理的打字稿文件构建的,因此存在线路问题。
查看有关 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 文件并查看结果。
【讨论】:
以上是关于Karma 为具有无效行号的 Angular 项目生成 lcov 报告的主要内容,如果未能解决你的问题,请参考以下文章
PhantomJS 不适用于 Angular2 项目中的 Karma
Angular - Jasmine/karma - 订阅 lambda 表达式未执行
有没有办法批量处理 Karma - Angular 单元测试?
如何在 Angular 7 中使用 Karma/Jasmine 为 App_Initializer 编写单元测试用例
使用 karma 和 jamis 进行 Angular 单元测试
在 Angular 8 (Karma 4.1.0) 升级后,在 Angular 7 (Karma 2.0.4) 中成功完成的 Karma 测试失败