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 の実行時に RSpecRails を使っている指定をしてくれるようになります。

このとき、上記のようにアプリケーション内にバンドルする形で 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