Rails3+Spork+rspec2+autotest

まず、Railsのテストはやたら遅いんです。
いくらTDDだとかBDDだとか言っても、動作が遅いと楽しくない。
というわけで測ってみました。

$ rails g scaffold NumberPlace name:string nps:string session_id:string
$ time rake spec
/home/sandmark/.rvm/rubies/ruby-1.9.2-p290/bin/ruby -S rspec ./spec/helpers/number_places_helper_spec.rb ./spec/controllers/number_places_controller_spec.rb ./spec/requests/number_places_spec.rb ./spec/routing/number_places_routing_spec.rb ./spec/views/number_places/index.html.haml_spec.rb ./spec/views/number_places/edit.html.haml_spec.rb ./spec/views/number_places/new.html.haml_spec.rb ./spec/views/number_places/show.html.haml_spec.rb ./spec/models/number_place_spec.rb
*............................*

Pending:
  NumberPlacesHelper add some examples to (or delete) /home/sandmark/backup/code/ruby/NumberPlaceSolver/spec/helpers/number_places_helper_spec.rb
    # No reason given
    # ./spec/helpers/number_places_helper_spec.rb:14
  NumberPlace add some examples to (or delete) /home/sandmark/backup/code/ruby/NumberPlaceSolver/spec/models/number_place_spec.rb
    # No reason given
    # ./spec/models/number_place_spec.rb:4

Finished in 0.7389 seconds
30 examples, 0 failures, 2 pending
rake spec  6.42s user 1.18s system 83% cpu 9.080 total

scaffoldした直後のテストで7秒弱。
仮にautotestで自動実行するにしても、ちょっと不安な数字です。
というわけで、Sporkを導入してみることにしました。

# まずはGemfileにsporkを追加。ついでにrspecとautotestも
$ vi Gemfile
group :test, :development do
  gem 'spork'
  gem 'autotest-rails'
  gem 'rspec-rails'
end

# 次におなじみbundle install。ただしproduction、てめーはダメだ
$ bundle install --without production

# そしてSporkの初期設定。これで spec/spec_helper.rb に
# Spork用のブロックが追加されます。
$ spork --bootstrap

# そしてautotestの設定ファイルを作る
$ touch .autotest

# RSpec2とSporkはDRubyでやりとりするので、.rspecに設定を書く
$ vi .rspec
--colour --drb

# Spork起動
$ spork

# $RAILS_ROOTで autotest と叩くだけ
$ autotest
loading autotest/rails_rspec2
................*....*........

Pending:
  NumberPlacesHelper add some examples to (or delete) spec/helpers/number_places_helper_spec.rb
    # No reason given
    # ./spec/helpers/number_places_helper_spec.rb:14
  NumberPlace add some examples to (or delete) spec/models/number_place_spec.rb
    # No reason given
    # ./spec/models/number_place_spec.rb:4

Finished in 0.71205 seconds
30 examples, 0 failures, 2 pending

10倍ほど速くなりました。