Я пытаюсь настроить модульные тесты и тестовое покрытие для проекта PHP 7.4 с использованием PHPUnit 9.x. Мне удалось заставить его работать локально, но мне трудно заставить его работать в конвейере на GitLab, который просто использует Docker под капотом. Я использую изображение php:7.4
. На данный момент тесты выполняются, но отчет о покрытии пропускается с предупреждением:
Драйвер покрытия кода недоступен
Я пытался установить Xdebug 3.1.5, так как это последняя версия, поддерживающая PHP 7.4. Судя по ряду других тем на Stack Overflow и других сайтах, большинство людей предлагают запустить эти две команды:
pecl install xdebug-3.1.5
docker-php-ext-install xdebug
Когда они запускаются, второй выдает ошибку
/usr/src/php/ext/xdebug не существует
Запуск docker-php-ext-install xdebug-3.1.5
дает такую же ошибку. Я также пытался вообще пропустить вторую команду, но все равно получаю предупреждение от phpunit об отсутствии драйвера покрытия.
Как мне установить xdebug-3.1.5
, чтобы получить отчет о покрытии от PHPUnit?
@β.εηοιτ.βε docker-php-ext-enable xdebug
сделал свое дело. Спасибо! Не стесняйтесь поделиться им как ответом, чтобы я мог отметить его как таковой.
Как следует из названия, команда docker-php-ext-install
предназначена для установки расширения PHP — файла .so
. Использование PECL — это просто еще один способ установки расширений, поэтому, пытаясь использовать docker-php-ext-install
после pecl install
, вы пытаетесь сделать одно и то же дважды.
И как указывает конец pecl install
:
Вы должны добавить «zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so» в php.ini
Именно для этого предназначен docker-php-ext-enable.
Итак, ваш рабочий файл Dockerfile будет таким:
FROM php:7.4
RUN pecl install xdebug-3.1.5 \
&& docker-php-ext-enable xdebug
На самом деле это указано в документации к изображению php
:
Расширения PECL
Некоторые расширения не поставляются с исходным кодом PHP, а вместо этого доступны через PECL. Чтобы установить расширение PECL, используйте
pecl install
, чтобы загрузить и скомпилировать его, затем используйтеdocker-php-ext-enable
, чтобы включить его:FROM php:7.4-cli RUN pecl install redis-5.1.1 \ && pecl install xdebug-2.8.1 \ && docker-php-ext-enable redis xdebug
Source: https://hub.docker.com/_/php
docker-php-ext-enable xdebug
* а неdocker-php-ext-install
, на самом деле он есть в документации: hub.docker.com/_/php в главе "Расширения PECL".