我正在 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 也一样
以下配置将让 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 使用)生成的覆盖率报告的正确正则表达式。
我正在使用以下正则表达式来解析 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'],
我不熟悉 Jest,但是如果您要创建 JSON,最简单的方法就是简单地
cat
JSON 然后相应地更改正则表达式