今天上午,我兴致勃勃的提交了一个PR,结果跑Pipeline
的时候出了问题,我们用的是ADO
(Azure DevOps),失败的原因是Unit Tes
t覆盖率不够,覆盖率不够算是常见的问题了,但是这个问题比较特殊,SonarQube
报告显示Unit Test覆盖率为0%,这就奇怪了。
我们的项目已经开始三个月了,PR也提交了很多,还没有遇到覆盖率是0%的情况。于是开始排查SonarQube的配置,是不是无法拉取覆盖率报告导致覆盖率为了,看了很多log,发现没有问题。
又回过头来排查项目代码,检查pipeline
的配置,也没有发现问题。
百思不得解,这时候,有一位同事反应,他在本地跑测试的时候(npx jest --coverage
),也无法生成覆盖率报告了。正常情况下,jest
会生成一个lcov
格式的覆盖率报告,位于项目根目录的coverage
目录下。于是尝试删除coverage
目录,重新运行测试,还是没有生成覆盖率报告。
这基本上可以断定是本地配置的问题,与SonarQube
或者Pipeline
配置都无关。于是开始排查jest
的配置文件,发现了一个问题:
1 | module.exports = { |
这个配置项collectCoverage
被设置为false
,这就导致了jest
不会收集覆盖率信息。于是将其改为true
,重新运行测试,一切正常!
原来,随着项目的不断推进,单元测试用例越来越多,导致跑一次测试要好几分钟,于是前端组的小张为了加快测试速度,临时将collectCoverage
设置为false
,以便快速跑通测试用例。没想到这个配置被提交到了代码库中,导致了覆盖率报告无法生成。