代码覆盖范围从Jest到stdout再到GitLab

d7v8vwbk  于 2023-03-21  发布在  Jest
关注(0)|答案(3)|浏览(153)

我在GitLab CI中运行代码覆盖率的jest测试,GitLab从gitlab中的运行者的stdout中获取百分比。
jest --coverage在stdout中生成覆盖率,gitlab使用/All files[^|]*\|[^|]*\s+([\d\.]+)/ regexp捕获它,但是当我运行jest --coverage --json --outputFile=xyz.json时,jest没有将代码覆盖率打印到stdout。
当给jest提供--json参数时,我可以做些什么来从jest获得stdout中的代码覆盖率?
jest version : v22.4.3与jest-cli相同

3bygqnnd

3bygqnnd1#

下面的配置可以让GitLab解释Jest生成的覆盖率报告:

stages:
  - test

Unit tests:
  image: node:12.17.0
  stage: test
  script:
    - jest --coverage
  coverage: /All\sfiles.*?\s+(\d+.\d+)/

GitLab中存在一个未决问题,其中包含使用Jest(Create React App使用的)生成的覆盖率报告的正确正则表达式。

np8igboo

np8igboo2#

我使用下面的正则表达式来解析来自Jest for Gitlab的text-summary覆盖率报告:/^(?:Statements|Branches|Functions|Lines)\s*:\s*([^%]+)/
注意Gitlab只会考虑最后一个匹配,所以上面的例子可以写成/^Lines\s*:\s*([^%]+)/,我提供了完整的例子,这样你就可以选择对你的项目最有意义的一个。
从Gitlab 15开始,您需要在.gitlab-ci.yml文件中为coverage键提供这个正则表达式,而不再在Gitlab项目设置中提供。
“文本摘要”报告在StdOut中如下所示:

=============================== Coverage summary ===============================
Statements   : 80.49% ( 2611/3244 )
Branches     : 65.37% ( 923/1412 )
Functions    : 76.48% ( 582/761 )
Lines        : 80.44% ( 2583/3211 )
================================================================================

确保您已将text-summary作为coverage reporter包含在jest.config.js中:

coverageReporters: ['text-summary', 'lcov', 'cobertura'],
iq0todco

iq0todco3#

我不熟悉Jest,但是如果您要创建JSON,最简单的方法是对JSON进行cat,然后相应地更改正则表达式

相关问题