Jest覆盖率正常但Sonar扫描显示0%覆盖率问题咨询
Jest本地覆盖率正常但Sonar扫描显示覆盖率为0的排查方案
按优先级从高到低排查以下问题即可解决:
- 首先确认Jest确实生成了符合要求的lcov报告
打开jest.config.js检查coverageReporters配置,必须包含lcov项,建议配置为coverageReporters: ["lcov", "text", "text-summary"];同时确认coverageDirectory配置值为coverage,和sonar配置里的报告路径匹配。跑jest命令时必须携带--coverage参数,否则只会在终端输出覆盖率结果,不会生成lcov.info文件,Sonar读不到文件自然显示0。 - 检查lcov.info内的文件路径匹配性
打开生成的coverage/lcov.info文件,查看每个记录开头的SF:字段,该字段是源码文件的相对路径,必须和sonar-project.properties里sonar.sources配置的目录前缀完全匹配。比如你配置sonar.sources=src,那SF字段应该是类似SF:src/utils/index.js的格式,如果多了项目根目录前缀、或者路径大小写和实际文件不一致(大小写敏感系统下会触发该问题),Sonar无法把覆盖率数据和实际源码文件关联,就会显示0覆盖率。 - 修正冗余/错误的Sonar配置
你当前配置里存在两个问题:package.json里的sonar56x: true是适配SonarQube 5.6及更早版本的开关,如果你使用的Sonar版本高于6.x,必须把该值改为false,否则生成的测试报告格式不符合新版Sonar解析规则sonar-project.properties里同时配置了sonar.testExecutionReportPaths和sonar.genericcoverage.unitTestReportPaths属于重复冲突配置,后者是旧版Sonar通用覆盖率插件的配置项,新版SonarJS不需要,直接删除sonar.genericcoverage.unitTestReportPaths=coverage/test-report.xml这行即可。
- 校验Sonar基础路径配置
确认sonar-project.properties里正确配置了源码和测试文件路径:# 业务源码目录,根据你的实际项目结构调整 sonar.sources=src # 测试用例目录,根据你的实际项目结构调整 sonar.tests=__tests__ # 如果使用了TS/JSX,要补全对应后缀 sonar.javascript.file.suffixes=.js,.jsx,.ts,.tsx sonar.typescript.file.suffixes=.ts,.tsx - 确认执行顺序正确
必须先执行jest命令完成测试、生成完整的coverage目录下的所有报告文件,再执行sonar-scanner启动扫描,顺序颠倒会导致Sonar读取不到最新生成的报告文件。
内容的提问来源于stack exchange,提问作者Krishna Atmakur
相关产品推荐
相关产品推荐

