从 Jest 到标准输出到 GitLab 的代码覆盖率

问题描述 投票:0回答:3

我正在 GitLab CI 中运行带有代码覆盖率的玩笑测试,GitLab 从 gitlab 中的跑步者的标准输出中捕获百分比。

jest --coverage
在标准输出中生成覆盖率,gitlab 使用
/All files[^|]*\|[^|]*\s+([\d\.]+)/
正则表达式捕获它,但是当我运行时
jest --coverage --json --outputFile=xyz.json
遗憾的是 jest 没有将代码覆盖率打印到标准输出。

当给 jest

--json
参数时,我能做些什么来从 jest 获得标准输出中的代码覆盖率?

jest version : v22.4.3
jest-cli 也一样

jestjs code-coverage gitlab-ci
3个回答
42
投票

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

stages:
  - test

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

GitLab 上有一个open issue,其中包含使用 Jest(由 Create React App 使用)生成的覆盖率报告的正确正则表达式。


9
投票

我正在使用以下正则表达式来解析 Jest for Gitlab 的

text-summary
覆盖率报告:
/^(?:Statements|Branches|Functions|Lines)\s*:\s*([^%]+)/

请注意,Gitlab 只会考虑last match。所以上面可以写成

/^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
作为报道记者包括在您的
jest.config.js
中:

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

1
投票

我不熟悉 Jest,但是如果您要创建 JSON,最简单的方法就是简单地

cat
JSON 然后相应地更改正则表达式

© www.soinside.com 2019 - 2024. All rights reserved.