RailsCastsで知ったgemです。
テストファイルを編集するたびにターミナルに戻ってコマンドを打つのはちょっと面倒なものです。Jenkinsでテストをやらせるという手もあるのですが、Jenkinsはコミットしないとテストをしてくれないので、ちょっと手元で確かめるのは不向きです。
そこで、guardです。guardは、手元でファイルを編集・保存したらそれを検知して勝手にテストをやってくれるgemです。
インストール
使っているテストに応じてインストールするGemが変わります。私は、RSpecを使っているので、Gemfileに
group :development do gem 'guard-rspec' end
と記述します。下手に
group :development do gem 'guard' end
ってことをやっちゃうと、のちのち、Guardfileの作成に苦しむので、やめるように。
後は、bundle installしてあげればOK。
Guardfileの初期化
次に、Guardfileを作成します。
guard init rspec
としてあげることで、Guardfileが作られます。作られるGuardfileは、
# A sample Guardfile # More info at https://github.com/guard/guard#readme guard 'rspec', :version => 2 do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } watch('spec/spec_helper.rb') { "spec" } # Rails example 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{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] } watch(%r{^spec/support/(.+)\.rb$}) { "spec" } watch('config/routes.rb') { "spec/routing" } watch('app/controllers/application_controller.rb') { "spec/controllers" } # Capybara request specs watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" } end
ってな感じ。
後は、ターミナル上で、
$ guard
って打てばOK。なんか、
WARNING: You are using Guard outside of Bundler, this is dangerous and may not work. Using `bundle exec guard` is safer.
ってメッセージが出て、「おめぇがやっている方法は危険だから、bundle exec guardってやれ」(意訳)って怒られるんだけど、気にしない。
後は、specファイルを編集するたびに勝手にrspecが動いてくれます。