我已经配置了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
很遗憾,Sonarqube JavaScript插件只考虑以SF:
,DA:
或BRDA:
开头的行(参见LCOVParser)。
因此,由Istanbul生成的LCOV HTML报告给出的代码覆盖率比Sonar在相同数据上高。
有没有办法更改生成的lcov.info
格式?
如果我查看 Istanbul代码,我可以想象不同标签的含义:
BRF
,BRH
,BRDA
是用于分支。FN
,FNF
,FNH
,FNDA
是用于函数。LN
,LF
,LH
是用于行。*F
是总计,而*H
是已覆盖的信息。
似乎Istanbul和Sonar之间覆盖率差异的原因是后者完全忽略了函数和分支覆盖率。
有什么解决办法吗?