xdebug を有効にしてphpunitを実行したい。
Xdebug の設定をしたとしても、phpunit の設定だとか、xdebugや日付などの php.iniを作るのが不便。
プロジェクトを切り替える毎に、php.iniを見直すのは割と面倒くさい。
phpには user.iniがある
php には実行時に、php.iniを読み込んでグローバル設定を、プロジェクト毎の設定で上書きすることが出来る。
これを laravelから使う。
やりかた
.iniを作る
takuya@laravel$ cat - > .php.user.ini xdebug.remote_enable=1 xdebug.remote_autostart=1 xdebug.remote_host=localhost xdebug.remote_port=9000 xdebug.remote_log=/tmp/xdebug.log xdebug.idekey=takuya1st
Laravel のホームディレクトリに user.iniを作る
artisanコマンドの定義
php artisan:make command RunTest
実行
php artisan test
ソースコード
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class RunTest extends Command { /** * The name and signature of the console command. * @var string */ protected $signature = 'test {filter?}'; /** * The console command description. * @var string */ protected $description = 'phpunit でテスト実行'; /** * Create a new command instance. * @return void */ public function __construct () { parent::__construct(); } /** * Execute the console command. * @return mixed */ public function handle () { $filter = ''; if($this->argument('filter')) { $filter = $this->argument('filter'); $filter = "--filter=/$filter/i"; } $cmd = "./vendor/bin/phpunit". ' '.$filter; // laravel ルートディレクトリにある .user.ini を読み込ませる $ini_scan_dir = base_path(); $addtional_env=" PHP_INI_SCAN_DIR=:$ini_scan_dir "; $cmd = $addtional_env.$cmd; // dd($cmd); passthru($cmd); } }
JetBrains での設定
別途、記事にします。ご参考ください
ポイント
メリット
xdebug がぱぱっと使えるようになるとメッチャ捗る。
laravel のdd/dumpよりも楽になる。
とくに phpunit は複数がマルチに動くので debugger があると助かる。