大まかな流れ
- Dockerfileにxdebug関連のライブラリをインスコする記述を書く
- オリジナルの ini ファイルに、xdebug 関連の設定を書く
- phpunit.xmlにレポート出力設定を書く
- コマンドを実行する
環境
- Laravel 8.x
- PHPUnit 9.x
- Docker (and docker-compose)
- Xdebug 3.1.x
仮想ディレクトリ構成
├── myapp -> Laravelプロジェクト
│ ├── app
│ ├── bootstrap
...
│ ├── tests
│ └── coverage
│ ├── phpunit.xml
│
├── config
│ ├── xdebug.ini
├── Dockerfile
Dockerfile
FROM webdevops/php-nginx:8.0
# xdebug install
RUN pecl install xdebug && \
docker-php-ext-enable xdebug
# xdebugに関する php.ini の設定ファイルをイメージに追加
ADD config/xdebug.ini /usr/local/etc/php/conf.d/custom.ini
php/conf.d
に追加された .ini
ファイルは、最終的に php.ini
に合体されるので、ここに追記する xdebug に関する設定を書く。
xdebug.ini
[xdebug]
xdebug.client_host = host.docker.internal
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = 0
xdebug.client_port = 9005
xdebug.log=/tmp/xdebug.lo
phpunit.xml
<logging>
<log type="coverage-html" target="tests/coverage" showUncoveredFiles="true"/>
</logging>
実行する
コンテナに入って、Laravelのプロジェクトルートディレクトリで以下を実行する。
XDEBUG_MODE=coverage php artisan test --coverage-html tests/coverage
以下でも可。
XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-html tests/coverage
先頭に XDEBUG_MODE=coverage
を追加しないとレポートが出力されないので注意。
tests/coverage
はレポートの出力先ディレクトリなので任意の場所を設定する。
おわりに
これでカバレッジレポートが出力されます。