gulpでPHPUnitを自動実行させる
普段、vimを使ってPHPで開発をしているのですが、開発中はgulpを使ってPHPUnitを自動実行させています。そのテストコード実行環境をご紹介。
gulpについては前にこちらの記事でまとめてますのでご参考までに。 blog.darudaru-life.com
準備
gulpと、PHPUnitを実行させるために使うプラグインをインストールします。使うプラグインはこれ。
- gulp-phpunit
PHPUnitを簡単に操作できるプラグイン - gulp-notify
デスクトップ通知をすることができるプラグイン。PHPUnitの成功、失敗を通知させるために使います。
インストールの仕方は、プロジェクトのルートディレクトリに移動してnpmのコマンドを実行してください。書いてないですが、インストール後に作られるnode_modulesディレクトリは.gitignore
ファイルに追加してgit管理対象外にしてます。
$ npm init $ npm install --save-dev gulp $ npm install --save-dev gulp-phpunit $ npm install --save-dev gulp-notify
インストールが終わったら、gulpfiles.jsを作っておきます。
$ touch gulpfile.js
gulpのタスクを作成
gulpのタスクで実現させてるのはこれ。
- ファイルが保存されたらPHPUnitを実行させる
- 成功、失敗はデスクトップ通知させる
こうすることで、画面いっぱいにvimを開いて開発しつつ、裏でPHPUnitを実行させてテストコード失敗を素早く検知できる
ではgulpfile.jsにタスクを書いていきます。
gulpfile.js
var gulp = require('gulp'); var phpunit = require('gulp-phpunit'); var notify = require('gulp-notify'); // ファイル監視 gulp.task('watch', function(){ gulp.watch('./**/*.php', ['phpunit']); }); // phpunit実行 gulp.task('phpunit', function(){ var options = {debug: false, notify: false}; gulp.src('') .pipe(phpunit('./vendor/bin/phpunit', options)) .on('error', notify.onError({ title: 'Tests Failed', message: '\n\nOne or more tests failed...\n\n', icon: __dirname + '/node_modules/gulp-phpunit/assets/test-fail.png' })) .pipe(notify({ title: 'Tests Passed', message: '\n\nAll tests have passed!\n\n', icon: __dirname + '/node_modules/gulp-phpunit/assets/test-pass.png' })); });
タスクを書くときのポイントは以下です。
- gulp-phpunitのオプションで
notify:false
を指定する
gulp-notifyで通知させるようにしているが、gulp-phpunitにはデフォルトで通知する処理が入っているため、通知をオフにしておかないと二重で通知されることになる。
ちなみにgulp-phpunitのデフォルトの通知は、失敗時は作動しない。 - gulp-phpunitは
./vendor/bin/phpunit
のように、PHPUnitをパス指定で実行させることもできる。同様に、例えばfuelのoilを使ったユニットテストコードも、gulp-phpunitにphp oil test
のコマンドを渡して実行させることができる。
PHPUnitの自動実行を開始する
今回PHPUnitの自動実行のタスクは、watchというタスクで作りました。以下のコマンドで、watchのタスクを起動させておきます。
$ gulp watch
あとは、vimで開発するだけ。ファイルを保存したタイミングで、gulpがPHPUnitを実行させて、結果を通知してくれます。
PHPUnitの実行結果は、gulp watchのコマンドの出力結果で確認可能です。
とっても便利。
まとめ
gulpはPHPerにも使える。