概要
PHP で PHPUnit のテストがうまく通らず、PHPStorm でステップ実行したくなることがたまにあります。
しかしながら、PHPStorm の PHP Remote Debug はブラウザ経由でないと、動きません。
と、思っていましたが PHPStorm でやれる方法が判ったので設定方法を共有します。
なので、無理やり画面を作って、PHPUnit を実行する方法を取ったら、まあ上手くいったので覚書ついでに共有してみます。 (2016--216 k-hottaさんからの指摘でさらに良い方法にたどり着いたので修正しました。)
さらに良い方法をご存知の方がいらっしゃいましたら是非コメントください。
前提環境
- PHPStorm を使っている。
- vagrant を使っており、 php はゲストサーバ側にある。
(つまりリモートデバッグは可能。) - テストしたい部分には Web 経由で表示する画面がない。
PHPStromの設定方法
[SFTPの設定]
-
Settings
のBuild, Execution, Deployment
>Deployment
で+
を押す。 -
Add Server
画面がポップアップするのでname
をvagrant
、Type
をSFTP
に設定してOK
。
-
Connection
タプに vagrant との接続設定を書く。Root path
にソースのルートを書いておくと後が楽(末尾に/
はつけない)。
-
Mappings
タブは下記のように書く:-
Local path
にはローカルのプロジェクトのディレクトリを書く。 -
Deployment path on server 'vagrant'
には、リモートのプロジェクトのディレクトリを、前述のRoot path
からのパスを/
から初めて書く。
-
[PHPのInterpreterの設定]
-
Settings
のLanguages & Freamworks
>PHP
にInterpreter
という項目があり、この...
を押す。 -
Interpreters
という画面がポップアップするので、+
を押してRemote...
を追加する。 -
SSH Credentials
を選び、接続情報を入力し、OK
。 - さらに
OK
して、Interpreters
にRemote PHP ~
がセットされたことを確認してOK
。
[リモートの PHPUnit の設定]
-
Settings
のLanguages & Freamworks
>PHP
>PHPUnit
で+
を押す。 - プルダウンが出るので
By Remote Interpreter
を選ぶ。 - 下記のように設定して
OK
を押す。
[CakePHP2 なら Edit Configuration のデフォルト設定]
※CakePHP2.x でないならこの項目は不要です。
- k-hottaさん の アダプタ(コードの欄に書いてあるソース) を保存する。
-
Run
>Edit Configurations...
メニューを選ぶ。 -
Defaults
の中のPHPUnit
を選ぶ。 -
Interpreter Options
で-f リモートサーバ上での上記アダプタへのフルパス
を設定する。
[テスト実行]
初回なら、
- テストしたいファイルで右クリック。
- メニューから
Debug クラス名
を選択する。
これでテスト実行されます。
無理やり画面作って動かす場合
上記の方法があれば不要ですが、まあ、何かの役に立つかもしれないので、残しておきます。
<?php
//テストしたいクラスを読み込みます(今回はこの中で autoloader.php を読み込んでいます。)
require_once __DIR__ . '/test/FooTest.php';
//テストしやすくするためにエラーが画面に表示されるようにしておきます(既になっていれば不要)
ini_set('display_errors', '1');
//単体テストのクラスを生成
$case = new FooTest();
//データプロパイダのデータを取得し、ループする
$data = $case->provider_suspending();
foreach ($data as list($a, $b, $c)) {
//試したいテストを実行する
$case->testテストメソッド($a, $b, $c);
}
手順
- 上記を適当な場所に置く。
- httpd.conf で新しいバーチャルドメインを作成し、上記のファイルをパスを通しておく。
- hosts でドメインが通るようにしておく。
- httpd 再起動。
以上。