Rails 3.0 + RSpec 2.0 で autotest
びぼうろく。Mac OSX 10.5 上で Rails 3.0 と RSpec 2.0 を使ってテストをします。
インストール
利用する gem を RAILS_ROOT/Gemfile に記述します。
group :development, :test do gem 'rspec', '>=2.0.0.beta.20' gem 'autotest' gem 'rspec-rails', '>=2.0.0.beta.20' gem 'webrat' end
ブラウザのシミュレーションには webrat と capybara が使えるようですが、本家サイトによると
Note that Capybara matchers are not available in view or helper specs.
との事なので一応 webrat を選択。
記述が終わったらインストールを行います。
bundle install vendor/bundle
無事に gem がインストールされたら、プロジェクト内で RSpec が使えるように初期化します。
rails g rspec:install
これが終わると、モデルやコントローラー等を作る際に、通常のテストに代わって spec ファイルが作成されるようになります。また RAILS_ROOT/autotest/discover.rb というファイルが作成され、autotest の実行時に RSpec と Rails を使っている指定をしてくれるようになります。
このとき、上記のようにアプリケーション内にバンドルする形で gem をインストールした場合は autotest の実行に以下のようなコマンドが必要になるので注意してください。
bundle exec autotest
実際にモデルを作ってみます。
rails g model blog invoke active_record create db/migrate/20101029061122_create_blogs.rb create app/models/blog.rb invoke rspec create spec/models/blog_spec.rb
確かに RSpec が使われています。何も記述していませんが autotest を動かしてみます。
bundle exec autotest Pending: Blog add some examples to (or delete) /Users/shibata/test/psybody/spec/models/blog_spec.rb # Not Yet Implemented # ./spec/models/blog_spec.rb:4 Finished in 0.00023 seconds 1 example, 0 failures, 1 pending
初期状態のペンディングされたテストが書かれているだけなのでテストは通りませんでしたが、自動的に実行されているようです。
実際使う時は、これをタブ分けするなり screen を立ち上げるなりしておいて、常時監視しながら作業する感じでしょうか。
参考リンク
本家サイトの ReadMe
http://github.com/rspec/rspec-rails/blob/master/README.markdown