Inertia-laravel のテストが動かせるように環境構築をする
リポジトリ: https://github.com/inertiajs/inertia-laravel
version: 1.x
とりあえずリポジトリを手元に落としてくる
ghq get git@github.com:inertiajs/inertia-laravel.git
リポジトリのディレクトリまで移動しておく
ローカルにインストールした composer && PHP を使用してもいいけど、容易な再現性を確保したいので、コンテナで環境を構築する
Dockerfile
FROM php:8.3-fpm-alpine
COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer
RUN apk --no-cache add autoconf build-base linux-headers
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
compose.yml
services:
inertia-laravel:
build: .
volumes:
- ./:/app
- inertia-laravel-vendor-volume:/app/vendor
working_dir: /app
volumes:
inertia-laravel-vendor-volume:
あとは docker compose up
で立ち上げる。
composer install する
docker compose exec inertia-laravel ash -c "composer install"
この時点でテストが動くはずなので、一旦動かしてみる
docker compose exec inertia-laravel ash -c "./vendor/bin/phpunit"
PHPUnit 10.5.28 by Sebastian Bergmann and contributors.
Runtime: PHP 8.3.9
Configuration: /app/phpunit.xml.dist
................................................................. 65 / 86 ( 75%)
..................... 86 / 86 (100%)
Time: 00:00.780, Memory: 32.00 MB
OK (86 tests, 316 assertions)
いい感じ。
一旦目標は達成できたが、追加の目標としてXdebugを使ってデバッグしてみる。
まずEditor側の設定を行う。
ちなみに僕は PHPStorm を使用しています。
CLI Interpreter 欄の一番右の ... を押す
左上の + を押して From Docker
を選ぶ
こういう感じで設定を入れてあげる。
多分、初回だと Server の箇所の設定が必要。
30sくらいかかってCLI Interpreter の設定に戻される。
このまま OK を押す
vendor ファイルがローカルにないと補完が効かないので、コピーしてくる。
docker compose cp inertia-laravel:/app/vendor ./
追加で設定が必要で、 Lifecycleは docker compose exec を選んでください((
と思ったけど、どうやらPHPStormは testbench というテストフレームワークに対応していないかも。。
ただ xdebug は欲しいので、 command line debug client をインストールしてみる。
というわけで Dockerfile を以下のように修正
FROM php:8.3-fpm-alpine
COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer
+ RUN wget https://xdebug.org/files/binaries/dbgpClient -P /usr/bin/ && chmod +x /usr/bin/dbgpClient
RUN apk --no-cache add autoconf build-base linux-headers
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
あと php.ini にいくつか手を加えないといけないので、そこも修正する。
FROM php:8.3-fpm-alpine
COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer
RUN wget https://xdebug.org/files/binaries/dbgpClient -P /usr/bin/ && chmod +x /usr/bin/dbgpClient
RUN cp "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
+ RUN echo 'xdebug.mode = debug' >> "$PHP_INI_DIR/php.ini"
+ RUN echo 'xdebug.start_with_request = yes' >> "$PHP_INI_DIR/php.ini"
+ RUN echo 'xdebug.client_port = 9003' >> "$PHP_INI_DIR/php.ini"
RUN apk --no-cache add autoconf build-base linux-headers
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
dbgpClient を立ち上げる時はこれ
docker compose exec inertia-laravel dbgpClient
dbgpClientを立ち上げて、もう一度テストを回す
docker compose exec inertia-laravel dbgpClient
# 別のターミナルから下記コマンドを打つ
docker compose exec inertia-laravel ash -c "php ./vendor/bin/phpunit"
そうするとなんかいい感じにデバッグできそうな雰囲気になる
docker compose exec inertia-laravel dbgpClient
Xdebug Simple DBGp client (0.6.1)
Copyright 2019-2024 by Derick Rethans
Waiting for debug server to connect on port 9003.
Connect from [::1]:39442
DBGp/1.0: Xdebug 3.3.2 — For PHP 8.3.9
Debugging file:///app/vendor/bin/phpunit (ID: 19/)
(cmd) breakpoint_set -t line -f file:///app/tests/AlwaysPropTest.php -n 12
1 | breakpoint_set
1 | Breakpoint set with ID 190001
(cmd) run
2 | run > break/ok
2 | file:///app/tests/AlwaysPropTest.php:13
みたいな感じで使うらしい
ここまでやって気づいたけど、phpunit実行しているのでエディタからphpunit実行できない理由がわからなくなってきたぞ...
autoload.phpからphpunitが検出できていないらしい。
30minくらい調べたけどよくわかんないので一旦放置。
とりあえず、テストは実行できるようになったのでこれでいいか。