下記の記事によると PhpStorm 8 では SSH 経由で PHPUnit が実行できるようです。
ホストが Windows で開発環境の VM が Linux(CentOS) なわたしは PhpStorm から PHPUnit が実行できるようにするためだけに Windows でも Linux でも動作するコードを書くように心がけているのですが(主に int のサイズ)、PhpStorm 8 がリリースされればそのような苦行とはさよならできそうです、やったね。
.
.
.
それはそれとして、思いつきで PhpStorm 7 でも SSH 経由で PHPUnit が実行できるようにしてみました。例外処理とかしていないやっつけですが PHPUnit を実行するだけなのでまぁいいかなと。
前提
- ローカルホストは Windows
- リモートホストは Linux
- php にはパスが通っている
- PhpStorm で Deployment の設定ができている
- あるいはローカルとリモートでディレクトリが共有されている
- PhpStorm で ローカルホストで PHPUnit が実行できるように設定済
- [PHP -> Servers] のマッピングの設定名はリモートホストのホスト名の最初のセグメントと一致する
abc.example.net
ならabc
という設定名にする
方法
PhpStorm の メインメニューから [Run -> Edit Configurations] を選択します。
[PHPUnit] の下にある設定をすべて削除します。
[Defaults -> PHPUnit] を選択して次のように設定します。
- Interpreter options:
-d include_path=. -d auto_prepend_file=remote.php
- Custom working directory: プロジェクトのルートディレクトリ
要するに PhpStorm で PHPUnit を実行するときに auto_prepend_file
で remote.php
が実行されれば OK です。
remote.php
を次の内容で作成します。先頭の3つの変数は適当に書き換えてください。あるいは同じディレクトリに remote.local.php
を作って、そのファイルに3つの変数を書くのでも OK です。
$remote_host
はリモートホストの IP アドレスやホスト名$remote_dir
はリモートホストのデプロイ先ディレクトリ- あるいは共有しているディレクトリのリモートホストのディレクトリ
$local_dir
はローカルの PhpStorm のプロジェクトのディレクトリ
PhpStorm で PHPUnit を実行します(PHPUnit on Server じゃなくてただの PHPUnit)。PHPUnit が SSH 経由で実行され、PhpStorm や Run や Debug のコンソールに結果が表示されます。
次のような Windows では通らないテストも・・・
グリーンです。
テストがコケたときのスタックトレースも、それっぽく書き換えているので PhpStorm でクリックすることができます。
リモートデバッグをしたいときは [Start Listen for PHP Debug Connections] を On にしてデバッグ実行してください。
[PHP -> Servers] でパスのマッピングを行っていれば、ブレークポイントを仕込んだところで止まります。
PhpStorm から PHPUnit をデバッグ実行したとき、本当なら XDEBUG_CONFIG
で idekey が渡されるのですが、その idekey で xdebug.remote のセッションを開始してもパスのマッピングが解決できない(PhpStorm は xdebug からローカルのパスで通知されると思っている)ため、PHPUnit のデバッグセッションではなく PHP Remote Debug のデバッグセッションとしてアタッチする必要があります。