Laravel + PHPUnit + PHPSpec
PHPプロジェクトのテスト
PHPのテストによく使われているのはPHPUnitとPHPSpecです。基本的にPHPUnitはすべてのテストをカバーできますが、自分はPHPSpecを優先にして、PHPUnitがバックアップっていう感じで使ってます。PHPSpecはオブジェクトの挙動を検証するには得意だが、サイトのリスポンスなどのテストはちょっと苦手です。
Laravel5のテスト
LaravelではすでにUnitテスト実装済みです。PHPUnitについては公式サイトを参考してください: http://laravel.com/docs/5.0/testing
PHPSpecを使う
LaravelのEloquentモデルはちょっと特殊で、PHPSpecを使うには面倒なセッティングが必要なので、phpspec-laravelを使うのをおすすめします: https://github.com/BenConstable/phpspec-laravel
phpspec-laravelを使う
composer.json
ファイルに
を追記します。
phpspec.yml
に
を追記します。composer update
を忘れずに!
すると、./vendor/bin/phpspec
からPHPSpecコマンドが実行できます。
PHPSpecを書いてみる
下記のコマンドでモデルを作成します。
すると、app/Node.php
が作成されます。次に、
を叩いて、App\Node
のテストファイルを作成します。spec/NodeSpec.php
を開いて、
を
にして、ObjectBehavior
のかわりにEloquentModelBehavior
を継承します:
そして、下記のコードを追加します:
./vendor/bin/phpspec run
します。
下記の情報が表示されます(PHPSpecのバージョンによって若干変わることがあります)
App\Node
にはgetType()
メソードがないってPHPSpecが
聞いてくるので、Y
で返答すれば、app\Node.php
に下記のコードが追加されます。
// TODO: write logic here
をreturn 'node';
に書き換えます。
もう一度./vendor/bin/phpspec run
すると:
通りました!こんな感じでPHPSpecでモデルやモジュールをデザインしながらコーディングすれば,より信頼性の高いコードが書けるようになります。