我有一个具有以下结构的应用程序:
my-application
+- pom.xml
+- app
| +- scripts
| | +- app.js
| | +- **/*.js
| +- 3rd-party-libs
+- build
+- node_modules
+- test
我创建了pom.xml
唯一运行 SonarQube 分析的程序。否则,所有任务都由 Grunt 运行(测试使用 Karma 运行)。
的内容pom.xml
如下:
<properties>
<sonar.language>js</sonar.language>
<sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
<sonar.javascript.coveragePlugin>lcov</sonar.javascript.coveragePlugin>
<sonar.javascript.lcov.reportPath>build/karma/coverage/lcov.info</sonar.javascript.lcov.reportPath>
<sonar.exclusions>app/3rd-party-libs/**,node_modules/**</sonar.exclusions>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
</properties>
<build>
<sourceDirectory>app/scripts</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
</build>
当我运行时grunt test
,它会创建一个build/karma/coverage/lcov.info
包含以下信息的:
TN:
SF:./app/scripts/app.js
FN:16,(anonymous_1)
FN:26,(anonymous_2)
FNF:2
...
在 SonarQube 分析之后,仪表板显示 0% 的代码覆盖率。
我怀疑 中的路径SF:
是错误的根源。因此,我更改了sonar.javascript.lcov.reportPath
属性以使用另一个属性来lcov.info
测试不同的值:app.js
, ./app.js
, app/scripts/app.js
, ./app/scripts/app.js
, 但没有一个起作用,将覆盖率保持为 0%。
我错过了什么?
以防万一,我的配置中有以下配置karma.conf.js
:
coverageReporter: {
reporters: [
{
type: 'lcov',
dir: 'build/karma/coverage',
subdir: '.'
}
]
},
ps:声纳版本是3.7.2,不过我也试过4.3,结果一样……
编辑:我已经更新了我的配置以直接使用 Sonar-runner,我使用的是最新版本的 Sonar(5.0.1)和 JS 插件(2.3)。我还手动修改了lcov.info
具有“良好”格式(至少一种与 Sonar repo 示例匹配的格式):
SF:./app/scripts/app.js
DA:2,1
DA:20,1
DA:29,1
DA:34,1
end_of_record
SF:./app/scripts/services/exampleService.js
DA:1,1
DA:11,1
DA:12,0
end_of_record
sonar-project.properties
看起来像:
sonar.projectKey=xxx
sonar.projectName=xxx
sonar.projectVersion=xxx
sonar.sourceEncoding=UTF-8
sonar.sources=app/scripts
sonar.tests=test
sonar.exclusions=app/3rd-party-libs/**,node_modules/**
sonar.dynamicAnalysis=reuseReports
sonar.language=js
sonar.projectBaseDir=.
sonar.javascript.coveragePlugin=lcov
sonar.javascript.lcov.reportPath=build/karma/coverage/lcov.info
而且,0% 的覆盖率 :(