これまで、Docker環境でのPHPのユニットテストは、毎回、コンテナにログインして実行してたけど、ファイルのパスを指定するなどなかなかめんどい。
ちなみに、世の中の VS Code 一強の流れに逆らうかのように PhpStorm を使っているんだが、これはこれで PHPに最適化されていて使いやすい。
というわけで、PhpStorm のGUIから直接テストが実行できそうな機能があったので、Docker環境でもできないかなと思って試してみた。
早速設定。
CILインタープリターの設定
環境設定を開き、PHPのペインの CLIインタープリターの右側にある「...」のボタンをクリックする。
次の4個所を設定する。
- 構成ファイル:利用している Dockerコンテナの docker-compose.yml のパスを指定する
- サービス:テストを実行するコンテナを指定する
- ライフサイクル:既存コンテナに接続するを選択
- PHP実行可能ファイルの右側にあるリロード?みたいなボタンをクリック
コンテナ内のPHPの認識に成功すれば、PHPバージョンや構成ファイルのパスが表示される。
実行構成の設定
メニュー ▶ 実行 ▶ 実行構成の編集をクリック
次の4箇所を設定。
- 左上の+ボタンより PHPUnit を選択
- テストランナーで「構成ファイルで定義」を選択
- 代替構成ファイルを仕様にチェックを入れ、PHPUnit の構成ファイルのパスを指定
- インタープリターで先程設定したインタープリターを選択
デフォルトのインタープリターの変更
これハマりポイント。これをやらないとテストの実行時にどうしても作成したインタープリターで実行してくれない。
Cmd + Shift + A を実行してアクションの実行ウインドウを表示する。
「Chage PHP interpreter」と入力して表示されたメニューをクリックする。
インタープリターの一覧が表示されるので、先程作成したインタープリターを選択する。
テストを実行する
テストクラスのメソッドの先頭あたりに実行ボタンが表示されているのでそれをクリックするとテストが始まる。
実行結果はこんな感じ。
データプロバイダーを利用しているのであれば、個別に実行もできる。便利。
ハマりポイント
インタープリターでPHPの認識ができずハマったが、Dockerの環境設定の問題だった。
調べまくったところ、Dockerの実行環境で、 .env
などで、COMPOSE_PROJECT_NAME
を指定している場合、特別な設定が必要そうな感じだった。
特に必要ではなかったので、.env
から COMPOSE_PROJECT_NAME
を削除したら正常に動作することができた。
まとめ
GUIからテストの実行ができるのはモチベーションあがる
PhpStorm を使ってる人はぜひ試してみて欲しいな。