Closed19

Inertia-laravel のテストが動かせるように環境構築をする

isseiissei

ローカルにインストールした 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 で立ち上げる。

isseiissei

composer install する

docker compose exec inertia-laravel ash -c "composer install"
isseiissei

この時点でテストが動くはずなので、一旦動かしてみる

 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)
isseiissei

一旦目標は達成できたが、追加の目標としてXdebugを使ってデバッグしてみる。
まずEditor側の設定を行う。
ちなみに僕は PHPStorm を使用しています。

isseiissei

CLI Interpreter 欄の一番右の ... を押す

左上の + を押して From Docker を選ぶ

こういう感じで設定を入れてあげる。

多分、初回だと Server の箇所の設定が必要。

isseiissei

30sくらいかかってCLI Interpreter の設定に戻される。
このまま OK を押す

isseiissei

vendor ファイルがローカルにないと補完が効かないので、コピーしてくる。

docker compose cp inertia-laravel:/app/vendor ./
isseiissei

追加で設定が必要で、 Lifecycleは docker compose exec を選んでください((

isseiissei

と思ったけど、どうやらPHPStormは testbench というテストフレームワークに対応していないかも。。
ただ xdebug は欲しいので、 command line debug client をインストールしてみる。

https://xdebug.org/docs/dbgpClient

isseiissei

というわけで 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
isseiissei

あと 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
isseiissei

dbgpClient を立ち上げる時はこれ
docker compose exec inertia-laravel dbgpClient

isseiissei

dbgpClientを立ち上げて、もう一度テストを回す

docker compose exec inertia-laravel dbgpClient

# 別のターミナルから下記コマンドを打つ
docker compose exec inertia-laravel ash -c "php ./vendor/bin/phpunit"
isseiissei

そうするとなんかいい感じにデバッグできそうな雰囲気になる

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/)
isseiissei
(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

みたいな感じで使うらしい

isseiissei

ここまでやって気づいたけど、phpunit実行しているのでエディタからphpunit実行できない理由がわからなくなってきたぞ...

isseiissei

autoload.phpからphpunitが検出できていないらしい。
30minくらい調べたけどよくわかんないので一旦放置。
とりあえず、テストは実行できるようになったのでこれでいいか。

このスクラップは1ヶ月前にクローズされました