0%

jest-config-do-not-collect-coverage

今天上午,我兴致勃勃的提交了一个PR,结果跑Pipeline的时候出了问题,我们用的是ADO(Azure DevOps),失败的原因是Unit Test覆盖率不够,覆盖率不够算是常见的问题了,但是这个问题比较特殊,SonarQube报告显示Unit Test覆盖率为0%,这就奇怪了。

我们的项目已经开始三个月了,PR也提交了很多,还没有遇到覆盖率是0%的情况。于是开始排查SonarQube的配置,是不是无法拉取覆盖率报告导致覆盖率为了,看了很多log,发现没有问题。

又回过头来排查项目代码,检查pipeline的配置,也没有发现问题。

百思不得解,这时候,有一位同事反应,他在本地跑测试的时候(npx jest --coverage),也无法生成覆盖率报告了。正常情况下,jest会生成一个lcov格式的覆盖率报告,位于项目根目录的coverage目录下。于是尝试删除coverage目录,重新运行测试,还是没有生成覆盖率报告。

这基本上可以断定是本地配置的问题,与SonarQube或者Pipeline配置都无关。于是开始排查jest的配置文件,发现了一个问题:

1
2
3
4
module.exports = {
collectCoverage: false, // 这里设置为false,导致不收集覆盖率
// 其他配置...
};

这个配置项collectCoverage被设置为false,这就导致了jest不会收集覆盖率信息。于是将其改为true,重新运行测试,一切正常!

原来,随着项目的不断推进,单元测试用例越来越多,导致跑一次测试要好几分钟,于是前端组的小张为了加快测试速度,临时将collectCoverage设置为false,以便快速跑通测试用例。没想到这个配置被提交到了代码库中,导致了覆盖率报告无法生成。