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倍ほど速くなりました。