けけずんセルフハッキング

エンジニアっぽい雰囲気を醸しだしているかのようなブログです!

PhpStormからDockerコンテナ内のPHPUnitを実行する

この記事について

株式会社Re:Buildアドベントカレンダー Advent Calendar 2020 の11日目の記事。

PhpStorm開いてる人に「今開いているテストファイルのこのテスト関数実行してみて」というと、大体の人がphpunitコマンドを叩いて全てのテストを実行していた。テストコードが増えてきた段階でこんなことをしてしまうと待ち時間が大変なことになるので、PhpStormから特定のテストを実行する方法(というか設定)を書き残しておく。

準備

PHPUnitのテストをDockerコンテナ内で行うためのサンプルを作ったのでこれをcloneし、composer installを実行する(composerがローカルに入っていない人は申し訳ないが頑張ってインストールしてね。)

$ git clone git@github.com:kkznch/20201212-phpunit-with-phpstorm.git
$ cd 20201212-phpunit-with-phpstorm
$ composer install

準備できたらPhpStormで上記のプロジェクトを開いてね。

設定手順

PHP CLI Interpreterの設定

PHPを実行する際にどの環境のものを使用するのか設定する。

  1. PhpStormのPreferencesを開く
  2. "Languages & Frameworks"->"PHP"を開き、"CLI Interpreter"の右端にある"..."をクリックする f:id:kkznch:20201212165412p:plain
  3. 左上にある "+" ボタンをクリックし、"From Docker, Vagrant, VM, WSL, Remote..." を選択する f:id:kkznch:20201212170010p:plain
  4. "Docker Compose"を選択し、"Configuration file(s)"にPhpStormで開いているプロジェクトのdocker-compose.ymlファイルへのパスを入力、"Service"に起動するコンテナ名(今回はphpという名前)を指定する f:id:kkznch:20201212170610p:plain

ここまで設定すると以下の画面が表示される。 画面真ん中にある"Lifecycle"は、PHP実行時に都度コンテナを起動するか、または既に起動しているコンテナを使用してPHPを実行するか、の二択。 php-fpmのように常時起動しているコンテナであれば後者の方を選択してもいいが、今回は単発起動で十分なので前者を選択しておく。 ここで"OK"ボタンを押してCLI Interpreterの設定は完了。 f:id:kkznch:20201212170841p:plain

PHPUnit実行時のCLI Interpreterの設定

PHPUnitを実行する際にどのCLI Interpreterを使用して実行するか設定する。

  1. PhpStormのPreferencesを開く
  2. "Languages & Frameworks"->"PHP"->"Test Frameworks"を開き、"+"ボタンをクリックし、"PHPUnit by Remote Interpreter"を選択する f:id:kkznch:20201212171811p:plain
  3. "Interpreter"に先程PHP CLI Interpreterで設定した設定(今回はphpという名前)を選択し、"OK"ボタンをクリックする f:id:kkznch:20201212171829p:plain
  4. "Path to script"にコンテナ内にあるautoloaderへのパス(今回は/root/vendor/autoload.php)を指定し、"OK"ボタンをクリックする f:id:kkznch:20201212172056p:plain

これでPHPUnitの実行設定が完了。

実行方法

PhpStormで実行したいテストが記述されたファイル(tests/SampleTest.php)を開くと、エディタの行番号表示欄の右側に謎の緑色が見えるはず。クラス定義をしている行の緑色をクリックし"Run 'SampleTest'"を選択するとクラス全体のテストが実行される。

また、関数定義をしている行の緑色をクリックし"Run 'testFirst'"を選択すると、testFirstというテスト関数だけが実行される。 f:id:kkznch:20201212173335p:plain

おわりに

phpunitコマンドでも特定のテストファイル、特定のテスト関数のみを実行することはできるが、PhpStormからぽちぽち実行できると楽だよね。

この記事書いた後に「phpstorm コンテナ phpunit」で検索すると似たような内容の記事がいっぱいでてきたので、書く前に調べておけばよかったと反省している。

参考

qiita.com qiita.com