2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PhpStorm で Docker環境のユニットテストを実行する

Last updated at Posted at 2024-02-18

これまで、Docker環境でのPHPのユニットテストは、毎回、コンテナにログインして実行してたけど、ファイルのパスを指定するなどなかなかめんどい。

ちなみに、世の中の VS Code 一強の流れに逆らうかのように PhpStorm を使っているんだが、これはこれで PHPに最適化されていて使いやすい。

というわけで、PhpStorm のGUIから直接テストが実行できそうな機能があったので、Docker環境でもできないかなと思って試してみた。

早速設定。

CILインタープリターの設定

スクリーンショット 2024-02-18 13.08.28.png

環境設定を開き、PHPのペインの CLIインタープリターの右側にある「...」のボタンをクリックする。

スクリーンショット 2024-02-18 13.08.55.png

次の4個所を設定する。

  1. 構成ファイル:利用している Dockerコンテナの docker-compose.yml のパスを指定する
  2. サービス:テストを実行するコンテナを指定する
  3. ライフサイクル:既存コンテナに接続するを選択
  4. PHP実行可能ファイルの右側にあるリロード?みたいなボタンをクリック

コンテナ内のPHPの認識に成功すれば、PHPバージョンや構成ファイルのパスが表示される。

実行構成の設定

メニュー ▶ 実行 ▶ 実行構成の編集をクリック

スクリーンショット 2024-02-18 13.34.55.png

次の4箇所を設定。

  1. 左上の+ボタンより PHPUnit を選択
  2. テストランナーで「構成ファイルで定義」を選択
  3. 代替構成ファイルを仕様にチェックを入れ、PHPUnit の構成ファイルのパスを指定
  4. インタープリターで先程設定したインタープリターを選択

デフォルトのインタープリターの変更

これハマりポイント。これをやらないとテストの実行時にどうしても作成したインタープリターで実行してくれない。

Cmd + Shift + A を実行してアクションの実行ウインドウを表示する。
「Chage PHP interpreter」と入力して表示されたメニューをクリックする。

スクリーンショット 2024-02-18 13.44.47.png

インタープリターの一覧が表示されるので、先程作成したインタープリターを選択する。

テストを実行する

テストクラスのメソッドの先頭あたりに実行ボタンが表示されているのでそれをクリックするとテストが始まる。

スクリーンショット 2024-02-18 13.49.19.png

実行結果はこんな感じ。

スクリーンショット 2024-02-18 13.51.34.png

データプロバイダーを利用しているのであれば、個別に実行もできる。便利。

スクリーンショット 2024-02-18 13.52.48.png

ハマりポイント

インタープリターでPHPの認識ができずハマったが、Dockerの環境設定の問題だった。
調べまくったところ、Dockerの実行環境で、 .env などで、COMPOSE_PROJECT_NAME を指定している場合、特別な設定が必要そうな感じだった。
特に必要ではなかったので、.env から COMPOSE_PROJECT_NAME を削除したら正常に動作することができた。

まとめ

GUIからテストの実行ができるのはモチベーションあがる:beer:
PhpStorm を使ってる人はぜひ試してみて欲しいな。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?