Rails2系ではautospecを使ってやっていたけどGuardとSporkを使ったほうがいい気がしたので。
Install
インストールする必要のある物、及びバージョンは下記サイトを参考に
- rspec 1.3.2
- rspec-rails 1.3.4
- factory_girl 1.2.4
- spork 0.8.4
- guard-rspec -v 0.7.0
- guard
- ffi
- test-unit 1.2.3
- guard-spork 0.6.1(バージョン指定特にしてない)
辺りを入れる。(子リストの奴は依存関係でインストールされるもの)
Setup
下記コマンドは基本的にRails.rootで行うものとする。(例外的な場合は記載
RSpec
$ ruby script/generate rspec
Spork
$ spork rspec --bootstrap
spec/spec_helper.rbを編集してあげる。diff貼ると差分多すぎるので説明だけ。
Spork.prefork do # ここに元々のspec_helper.rbの内容を書く end
Guard
$ guard init spork $ guard init rspec
Guardfileが生成されている筈である。
RSpec1系を使っているので書き換える
diff --git a/Guardfile b/Guardfile @@ -13,7 +13,7 @@ guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAIL watch(%r{features/support/}) { :cucumber } end -guard 'rspec', :version => 2 do +guard 'rspec', :version => 1 do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } watch('spec/spec_helper.rb') { "spec" }
起動してみよう。
$ guard start
こんな感じのエラーがでた
ERROR: Could not start Spork server for RSpec, Test::Unit after 30 seconds. I will continue waiting for a further 60 seconds.
Test::Unit用のSpork設定は作ってないからエラー出ているのかなと思ったのでGuardfileを書き換える
diff --git a/Guardfile b/Guardfile index df0b4ce..31697da 100644 --- a/Guardfile +++ b/Guardfile @@ -1,7 +1,7 @@ # A sample Guardfile # More info at https://github.com/guard/guard#readme -guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do +guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' }, :test_unit => false do watch('config/application.rb') watch('config/environment.rb') watch(%r{^config/environments/.+\.rb$})
これで起動に成功した。別ウィンドウでspecファイルを更新してみると自動でテストが走り。
今回cucumberとbundlerは使わないので一応falseにしておく。
diff --git a/Guardfile b/Guardfile index df0b4ce..709cfeb 100644 --- a/Guardfile +++ b/Guardfile @@ -1,7 +1,7 @@ # A sample Guardfile # More info at https://github.com/guard/guard#readme -guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do +guard 'spork', :rspec_env => { 'RAILS_ENV' => 'test' }, :test_unit => false, :cucumber => false, :bundler => false do watch('config/application.rb') watch('config/environment.rb') watch(%r{^config/environments/.+\.rb$})
RSpecの出力に色がついてないからという浅はかな理由でspec/spec.optsを読んでくれていないみたいと判断して
コマンドラインオプションを足す。そしてGuardfileは最終的にこうなった
diff --git a/Guardfile b/Guardfile index df0b4ce..db3fe6d 100644 --- a/Guardfile +++ b/Guardfile @@ -1,7 +1,7 @@ # A sample Guardfile # More info at https://github.com/guard/guard#readme -guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do +guard 'spork', :rspec_env => { 'RAILS_ENV' => 'test' }, :test_unit => false, :cucumber => false, :bundler => false do watch('config/application.rb') watch('config/environment.rb') watch(%r{^config/environments/.+\.rb$}) @@ -13,7 +13,7 @@ guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAIL watch(%r{features/support/}) { :cucumber } end -guard 'rspec', :version => 2 do +guard 'rspec', :version => 1, :cli => "--color --drb" do watch(%r{^spec/.+_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } watch('spec/spec_helper.rb') { "spec" }
その他参考サイト
- guard-spork
- guard-rspec