Edited at

Cakephp + Guardでテストの実行を自動化

More than 5 years have passed since last update.


Guard

Ruby界隈では有名なGuardですが、何かというとファイルの変更を監視し、変更があったら何かするというのを簡単にやってくれるツールです。

フロントエンジニアではGruntが有名ですね。


Preparing

自分はPHPからRubyへ入ったのですが、最初困ったのが、下記のようなものでした。


  • rbenv: phpenvと同じく複数のrubyバージョンを管理する

  • rvm: こちらも上記と同じ、ただ、最近ではrbenvを使う事が多いのかな?

  • gem: PHPでのComposerと同じく、パッケージ管理

  • bundle: Gemfileというファイルを作成し、Gemパッケージの種類やバージョンを管理。

  • rake: CakePHPでいうbakeのようなものでしょうか、、

Guardのインストールは上記のbunleを使ってインストールします。


rbenv Installation

その前にまずはrubyのインストールです。

rbenvを使ってインストールします。ここではインストール方法は割愛しますので、下記をご覧下さい。

https://github.com/sstephenson/rbenv


Ruby Installation

rbenvを使ってrubyをインストールします。

私の環境はRuby 2.0.0なので、下記のようにrubyをインストールして下さい。

bash

rbenv install 2.0.0-p353

rubyがインストールされたら、

gem install bundle


Installation

GuardGuard-Shellのインストールに移ります。まずはCakePHPのプロジェクトルートに移動して下さい。


Gemfileファイル作成

vi app/Gemfile


app/Gemfile

source 'https://rubygems.org'

group :development, :test do
gem 'guard-shell'
end


もし、guardが入ってないってエラーがでたらgem install guardを実行


CakePHPで全てのテストを実行できるよう

vi app/Test/Case/allTest.php


app/Test/Case/allTest.php

<?php

class allTest extends CakeTestSuite {

public static function suite() {
$suite = new CakeTestSuite('All tests');
$suite->addTestDirectory(TESTS . 'Case' . DS . 'Controller');
$suite->addTestDirectory(TESTS . 'Case' . DS . 'Model');
$suite->addTestDirectory(TESTS . 'Case' . DS . 'View');
return $suite;
}

}



テスト実行

ちゃんと動いてるかチェックします。

app/Console/cake test app all

これでテストが失敗するか、成功するかのどちらかであれば問題ないです。


Guardfile

監視するファイルを指定します。

vi app/Guardfile


Guardfile

guard :shell do

watch(%r{app/Controller/(.+)\.php}) {|m| `app/Console/cake test app all`}
watch(%r{app/Model/(.+)\.php}) {|m| `app/Console/cake test app all`}
watch(%r{app/Test/(.+)\.php}) {|m| `app/Console/cake test app all`}
end

【注意】どのファイルを更新したらどのようなコマンドを実行するかは参考例なので、ご自身の環境に合わせて変更して下さい。


Execution

bundle exec guard


Finished

これでController, Model, Testのいずれかのファイルを変更すると自動でテストが走ります!


Related

Guard関連は以前に投稿したこちらも合わせてどうぞ