从Jest到stdout到GitLab的代码覆盖率

Dha*_*ila 8 code-coverage gitlab-ci jestjs

我在GitLab CI中进行了代码覆盖率的玩笑测试,GitLab从gitlab中的运行程序的标准输出中捕获了百分比。

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

--json参数提供给玩笑时,如何从玩笑中获得stdout中的代码覆盖率?

jest version : v22.4.3 对于jest-cli一样

nde*_*ker 12

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

stages:
  - test

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

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


med*_*kch 12

我使用以下正则表达式来解析text-summaryJest for Gitlab 的覆盖率报告:/^(?: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 )
================================================================================
Run Code Online (Sandbox Code Playgroud)

确保您已将text-summary报道记者纳入您的jest.config.js

coverageReporters: ['text-summary', 'lcov', 'cobertura'],
Run Code Online (Sandbox Code Playgroud)


sec*_*tor 1

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