Yii2 Codeception Запуск с покрытием в контейнере Docker с использованием PhpStorm - ошибка: драйвер покрытия кода недоступен - PullRequest
0 голосов
/ 27 февраля 2020

Я создал расширенное приложение Yii2, которое выполняется в контейнере Docker.

Я установил Docker в качестве службы в PhpStorm, поэтому мне не нужно использовать другую консоль для доступа мои контейнеры.

Я создал конфигурации Run / debug для выполнения тестов Codeception в PhpStorm, которые работают отлично.

enter image description here

enter image description here

Но когда я нажимаю на кнопку «Щит» (Запуск с покрытием)

enter image description here

Я получаю сообщение об ошибке :( «Драйвер покрытия кода недоступен») enter image description here

Но когда я выполняю эту команду из внутреннего контейнера:

codecept run --coverage --coverage-xml --coverage-html

Все работает нормально. enter image description here

Я много читал об этой теме 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
...