JS项目使用GitHub Actions跑SonarCloud覆盖率为0、LCOV未找到问题求助
问题排查与解决方案
根本原因
当前工作流仅执行了Sonar扫描步骤,未前置执行单测命令生成LCOV覆盖率文件,导致Sonar扫描时找不到指定路径下的coverage/lcov.info文件,最终覆盖率显示为0。
分步排查修复
- 补充工作流的测试执行步骤
SonarCloud本身不会主动执行单测生成覆盖率报告,需要你在扫描前手动完成依赖安装、单测执行的流程,修改后的工作流配置参考:sonarcloud: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 18 # 替换为你的项目实际使用的Node.js版本 cache: 'npm' # 用yarn/pnpm的话对应修改即可 - name: 安装项目依赖 run: npm ci - name: 执行单测生成覆盖率报告 run: npm run test:coverage # 请确保package.json的scripts中已配置test:coverage命令,示例: # "test:coverage": "jest --coverage" (jest场景) # "test:coverage": "vitest run --coverage" (vitest场景) - name: 验证覆盖率文件生成 run: ls -la coverage/lcov.info - name: SonarCloud Scan uses: sonarsource/sonarcloud-github-action@master env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - 核对LCOV文件路径配置
- 本地执行
npm run test:coverage,确认项目根目录下是否生成coverage/lcov.info文件 - 核对
sonar-project.properties中sonar.javascript.lcov.reportPaths的路径和实际生成路径完全一致,注意Linux系统大小写敏感,不要写错路径大小写
- 本地执行
- 若为monorepo项目,需补充所有子包的LCOV路径,多个路径用英文逗号分隔,示例:
sonar.javascript.lcov.reportPaths=packages/package-a/coverage/lcov.info,packages/package-b/coverage/lcov.info
验证方式
推送修改后的工作流配置后,查看GitHub Actions执行日志,若验证覆盖率文件生成步骤正常打印文件信息,Sonar扫描步骤不再抛出找不到LCOV文件的提示,即配置生效。
内容的提问来源于stack exchange,提问作者lakshmiravali rimmalapudi
相关产品推荐
相关产品推荐

