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

时间:2018-06-11 13:21:23

标签: jestjs code-coverage gitlab-ci

我在GitLab CI中使用代码覆盖进行jest测试,GitLab在gitlab中捕获了跑步者stdout的百分比。

jest --coverage在stdout中生成覆盖,gitlab使用/All files[^|]*\|[^|]*\s+([\d\.]+)/ regexp捕获它,但是当我运行时 jest --coverage --json --outputFile=xyz.json遗憾的是,jest不会将代码覆盖率打印到stdout。

--json参数被赋予jest时,如何从jest中获取stdout中的代码覆盖率?

jest version : v22.4.3与jest-cli相同

3 个答案:

答案 0 :(得分:4)

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

stages:
  - test

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我正在使用以下正则表达式来解析来自 Jest for Gitlab 的 text-summary 覆盖率报告:^(?:Statements|Branches|Functions|Lines)\s*:\s*([^%]+)

请注意,Gitlab 只会考虑最后一场比赛。所以上面可以写成^Lines\s*:\s*([^%]+)。我提供了完整的示例,以便您可以选择最适合您的项目的示例。

“文本摘要”报告在 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'],