概要
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 再起動。
以上。





