Gitlab Coverage Badge显示“Unknown”- NodeJS with Jest

ctzwtxfj  于 2023-05-06  发布在  Node.js
关注(0)|答案(1)|浏览(121)

我有一个问题,我的gitlab覆盖率徽章报告为“未知”的NodeJS项目我工作。我已经阅读了几十篇关于这个问题的stackoverflow文章,并尝试了所有建议的解决方案,但都无济于事,所以我想我会把我的设置细节放在这篇文章中,看看是否有人能找出可能导致这个问题的原因。
我在gitlab-ci.yml文件中的任务如下:

test_coverage:
  image: node:16
  stage: test_coverage
  before_script:
    - echo "This skips any predefined before scripts to ensure clean environments"
  tags:
    - Nexus
  script:
    - npm run test:ci
  coverage: /All\sfiles.*?\s+(\d+.\d+)/
  artifacts:
    when: always
    reports:
        junit:
            - ./junit.xml
        cobertura: coverage/cobertura-coverage.xml
  dependencies:
    - install
  except:
    - tags

我的package.json文件中的脚本npm run test:ci如下:

"test:ci": "CI=true NODE_ENV=test ENVIRONMENT=CI_CD NODE_OPTIONS=--experimental-vm-modules jest --coverage --collectCoverage --coverageDirectory=\"./coverage\" --ci --reporter=html --reporter=text --reporter=cobertura --reporters=default --reporters=jest-junit --watchAll=false"

我在Gitlab的测试覆盖率报告设置部分得到了以下正则表达式

/All\sfiles.*?\s+(\d+.\d+)/

我在gitlab中设置了徽章链接和URL。
当我在本地运行我的npm run test:ci脚本时,我得到了一个可爱的覆盖率报告。当我的作业在gitlab管道中运行时,我的覆盖率报告对每个文件都是0。它告诉我所有的测试都通过了。它告诉我,我的junit和cobertura工件已经成功完成了,工作也成功了。
我有一种强烈的感觉,如果我在gitlab作业日志中看到实际的覆盖率数字,就像我在本地运行脚本时看到的那样,徽章会起作用。但我不知道为什么我得到的都是0。有没有人能根据这里提供的信息看到我做错了什么?

polhcujo

polhcujo1#

GitLab项目页面上的测试覆盖率徽章显示默认分支上的测试覆盖率。
此外,应确保两件事:

  • 首先,jest.config.js需要包含text-summary和cobertura作为报告器。
// jest.config.js
  reporters: ['default', 'jest-junit'],
  coverageReporters: [
    'clover',
    'json',
    'lcov',
    'text',
    'text-summary',
    'cobertura',
  ],

...

其次,需要将cobertura报告作为工件上传到GitLab。

artifacts:
    paths:
      - coverage/
    reports:
      junit:
        - junit.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml

相关问题