guardを使ってソース編集後にテストを自動実行する

何かソースを変更した時に、テストを実行して動作を確認すると思いますが、いちいち


$ bundle exec rspec spec/~~~~

のように入力して確認するのも面倒だと感じることもあるかと思います。
そういう場合はguardを使ってテストの実行をdaemon化するのも良いと思います。

guardの設定は次のようのステップになります。

1.Gemfileに追加

gem 'guard'
gem 'guard-rspec', ' ~> 0.4.2'
gem 'guard-spring'

2.bundle installを実行

3.Guardの設定ファイルを生成


$ bundle exec guard init rspec

以下のようなGuardfileが生成される

guard :rspec, spring: true do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { 'spec' }

  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^spec/factories/(.+)\.rb$})                { 'spec/factories_spec.rb' }
  watch(%r{^spec/support/(.+)\.rb$})                  { 'spec' }
  watch('config/routes.rb')                           { 'spec/routing' }
  watch('app/controllers/application_controller.rb')  { 'spec/controllers' }
end

これで準備完了。

このGuardfileをみると何となく分かると思いますが、各ファイル(例えばapp/models)を編集したらそれに相当するテストが実行されます。