Я создал расширенное приложение Yii2, которое выполняется в контейнере Docker.
Я установил Docker в качестве службы в PhpStorm, поэтому мне не нужно использовать другую консоль для доступа мои контейнеры.
Я создал конфигурации Run / debug для выполнения тестов Codeception в PhpStorm, которые работают отлично.
Но когда я нажимаю на кнопку «Щит» (Запуск с покрытием)
Я получаю сообщение об ошибке :( «Драйвер покрытия кода недоступен»)
Но когда я выполняю эту команду из внутреннего контейнера:
codecept run --coverage --coverage-xml --coverage-html
Все работает нормально.
Я много читал об этой теме c, но все, кажется, указывают в сторону Xdebug, которая может не работать. Как вы увидите в моих конфигурационных файлах, я использую yiisoftware / yii2- php: 7.2- apache образ, который содержит xdebug и который я также включаю, используя переменные окружения. Чтобы доказать это, я также могу запустить сеанс отладки в PhpStorm.
Что я не понимаю, так это то, что эта команда «Выполнить с покрытием» выполняется внутри того же внутреннего контейнера и должна увидеть, что xdebug активен ...
[docker-compose://[C:\Users\Francois\Projects\tadv\docker-compose.yml]:backend/]:php /opt/.phpstorm_helpers/codeception.php run --report -o "reporters: report: PhpStorm_Codeception_ReportPrinter" --no-interaction --coverage-xml /opt/phpstorm-coverage/tadv$Codeception_BE_All.xml --quiet -c /app/backend/codeception.yml
Есть наверное что-то, чего мне не хватает. Любая помощь будет оценена.
Вот мои файлы конфигурации:
backend/docker-compose file
------------------------
version: '3.2'
services:
frontend:
build: frontend
ports:
- 20080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
# Mount source-code for development
- ./:/app
environment:
# When using Hyper-V
XDEBUG_CONFIG: remote_host=host.docker.internal remote_log=/tmp/xdebug.log
PHP_ENABLE_XDEBUG: 1
backend:
build: backend
ports:
- 21080:80
volumes:
# Re-use local composer cache via host-volume
- ~/.composer-docker/cache:/root/.composer/cache:delegated
# Mount source-code for development
- ./:/app
environment:
# When using Hyper-V
XDEBUG_CONFIG: remote_host=host.docker.internal remote_log=/tmp/xdebug.log
# When using VirtualBox
#XDEBUG_CONFIG: "remote_host=10.0.2.2 remote_port=9000 "
PHP_ENABLE_XDEBUG: 1
backend/Dockerfile
------------------------
FROM yiisoftware/yii2-php:7.2-apache
# Change document root for Apache
RUN sed -i -e 's|/app/web|/app/backend/web|g' /etc/apache2/sites-available/000-default.conf
Global codeception file
------------------------
# global codeception file to run tests from all apps
include:
- common
- frontend
- backend
paths:
log: console/runtime/logs
settings:
colors: true
backend/codeception file
------------------------
namespace: backend\tests
actor_suffix: Tester
paths:
tests: tests
output: tests/_output
data: tests/_data
support: tests/_support
coverage:
enabled: true
remote: true
include:
- models/*
- controllers/*
exclude:
- assets/*
- config/*
- runtime/*
- views/*
- web/*
- tests/*
bootstrap: _bootstrap.php
settings:
colors: true
memory_limit: 1024M
modules:
config:
Yii2:
configFile: 'config/codeception-local.php'
XDebug as found in my container php.ini
------------------------
root@b61903ccfbd7:/app# php -i | grep 'XDEBUG'
PHP_ENABLE_XDEBUG => 1
XDEBUG_CONFIG => remote_host=host.docker.internal remote_log=/tmp/xdebug.log
VERSION_XDEBUG => 2.8.1
$_SERVER['PHP_ENABLE_XDEBUG'] => 1
$_SERVER['XDEBUG_CONFIG'] => remote_host=host.docker.internal remote_log=/tmp/xdebug.log
$_SERVER['VERSION_XDEBUG'] => 2.8.1
$_ENV['PHP_ENABLE_XDEBUG'] => 1
$_ENV['XDEBUG_CONFIG'] => remote_host=host.docker.internal remote_log=/tmp/xdebug.log
$_ENV['VERSION_XDEBUG'] => 2.8.1