PhpstormでUnitテストを効率的に行う(Laradock multi-project)

kosa3
7 min readApr 6, 2019

--

Phpstormで複数のLaravelプロジェクトのUnitテストを設定しました。

これまでターミナルでDockerコンテナに入り testsディレクトリ配下まで移動して phpunit を実行してテストをしていました。

しかし、これではウィンドウが切り替わる or Phpstormのターミナルでコマンドを入力する必要があり、不便でした。
今後TDD開発を運用する際に毎度コマンドを入力する際にはとても効率的ではありません。

そこでIDE上で手軽にテストできないかと試してみました。
以下が設定後のgifです。

レスポンス成功時
レスポンス失敗時

テストを通すだけでなくデバッグやカバレッジも出力することが可能です。

環境設定

好きなプロジェクトルートでLaradockをcloneします。
(nginx, php-fpm, mysqlで構築します)

$ git clone https://github.com/laradock/laradock.git

パッケージ開発やセキュリティチェックなどのためにLaravel5系のプロジェクトを複数起動させたいためmultiple projectsのリソースから設定しました。
以下の階層にLaravelプロジェクトと同様の階層に配置します。

$ tree -L 1
.
├── 5.3
├── 5.4
├── 5.5
├── 5.6
├── 5.7
├── 5.8
└── laradock

起動するためにnginxのconfファイルの設定を作成します。 `laradock/nginx/sites/5.8.conf` (今回は5.3~5.7も同様のconfを作成しました。)

server {

listen 80;
listen [::]:80;

# For https
# listen 443 ssl;
# listen [::]:443 ssl ipv6only=on;
# ssl_certificate /etc/nginx/ssl/default.crt;
# ssl_certificate_key /etc/nginx/ssl/default.key;

server_name laravel.5.8;
root /var/www/5.8/public;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}

location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
}

error_log /var/log/nginx/app_error.log;
access_log /var/log/nginx/app_access.log;
}

設定ができたら /etc/hosts にserverNameを記載します
(*事前にlaradockフォルダの env-sample.env にコピーします。)

127.0.0.1       laravel.5.8
127.0.0.1 laravel.5.7
127.0.0.1 laravel.5.6
127.0.0.1 laravel.5.5
127.0.0.1 laravel.5.4
127.0.0.1 laravel.5.3

上記ができたのでlaradock配下のdocker-compose.ymlからコンテナを立ち上げていきます。
(*今回mysqlは使いませんが使用する際は各Laravel projectの.envでmysqlコンテナのホストを指定します)

$ docker-compose up -d nginx mysql

コンテナの立ち上げが終わりましたらブラウザにアクセスします。

上記の表示が確認できたらいよいよPhpstormの設定をしていきます。

Phpstormの設定

長くなってしまいましたがようやく本題のPhpstormの設定をしていきます。先ほど立ち上げたlaradockのDockerコンテナをPhpstormに設定していきます。

Preferences > Languages & Frameworks > PHP
以下のCli interpreter: の右の ... を押しphp-fpmを設定します。
(*以下の画像は設定ずみのものです。詳細設定は次の2枚目の画像になります)

Server名: 任意の名前に設定
Configuration file: docker-compose.ymlファイルを設定
Service: ymlファイルのサービスが選択できるようになるので php-fpm を選択します。
Lifecycle: どちらでも大丈夫です。
General: phpが読み込まれます、もし読み込みが失敗していたら同期ボタンを押すかServiceにphpが入っているかが問題になるかと考えられます。

上記で設定が終わったら次の設定です。

Preferences > Languages & Frameworks > PHP > Test Frameworks
CLI Interpreter: 先ほど設定した php-fpm
Path mappings: 各プロジェクトルートとコンテナ内のプロジェクトルートを合わせます。
ex) local Path: /Users/kosa3/5.8 → remote Path: /var/www/5.8
PHPunit library: パッケージのを読み込むautoload.phpのパスを設定します。(今回は5.8環境から拝借しました)

設定ができたらこれで設定が終わりました。動作を確認して最初のgifの通りに動作がすれば完了です。

実行にはディレクトリごとやファイルごと、メソッドごとにテストを簡単に実行できるのでとても作業が効率的になりました。

--

--

No responses yet