GitLab 中的代码覆盖率始终未知

Code coverage is always unknown in GitLab

我正在尝试了解 GitLab 管道,经过几次尝试,我能够成功地自动化我的单元测试。现在我正在尝试将代码覆盖率徽章添加到我的项目 and/or 自述文件中,但它似乎总是显示 unknown.

文件:

+ application
+ system
- unit-tests
  - tests
      UtilTest.php
    autoload.php
    phpunit
  .gitignore
  .gitlab-ci.yml
  .htaccess
  index.php
  readme.md

.gitlab-ci.yml:

image: php:5.6

stages:
  - test

app:unit-tests:
  stage: test
  script:
    - php ./unit-tests/phpunit --bootstrap ./unit-tests/autoload.php ./unit-tests/tests
  coverage: '/Code Coverage: \d+\.\d+/'

在项目的 Test coverage parsing 部分,我进行了以下设置:

所以我能够通过使用 PHP 7.2 作为 Docker 图像并在 before_script 调用上安装 xdebug 来解决这个问题。

.gitlab-ci.yml:

image: php:7.2

stages:
  - test

before_script:
  - pecl install xdebug
  - docker-php-ext-enable xdebug

app:unit-tests:
  stage: test
  script:
  - php ./unit-tests/phpunit --bootstrap ./unit-tests/autoload.php ./unit-tests/tests --coverage-text --colors=never
  coverage: '/^\s*Lines:\s*\d+.\d+\%/'

我不得不使用 PHP 7.2 因为当我尝试 运行 pecl install xdebug 它说它需要 PHP 7. 理想情况下我想使用 PHP 5.6,因为这是我们当前服务器的版本,所以测试是在类似的版本上进行的,但我暂时保持原样。

我必须在 script 调用中添加 --coverage-text --colors=never 才能输出数字。然后在 coverage 调用中,我将其更改为 '/^\s*Lines:\s*\d+.\d+\%/',我也在项目设置的 Test coverage parsing 部分下使用了它。

现在代码覆盖率正确地显示了我的预期值。