Rails3でRSPec2とmachinist2

Rails3でRSpec2machinist2を使うための下準備。

$ alias r=rails
$ r new testapp -T -d mysql
$ cd testapp
$ vi config/application.rb # Test::Unitにさよなら
$ vi Gemfile # RSpec2とmachinist2を追加
$ bundle install
$ r g rspec:install
$ r g machinist:install
$ vi config/application.rb # fixtureの代わりにblueprintを追加するように
$ vi ~/.autotest # DBを毎回クリアする

各種ファイルの編集は下記の通り。

Test::Unitにさよなら

-require 'rails/all'
+require "active_record/railtie"
+require "action_controller/railtie"
+require "action_mailer/railtie"
+require "active_resource/railtie"

RSpec2とmachinist2を追加

RSpec2+Rails3+autotest環境の構築あたりを参考にやってみた。でもautotestが上手く動かない気がする。

source 'http://rubygems.org'

gem 'rails', '3.0.3'
gem 'mysql2'

group :development, :test do
  gem 'rspec-rails'
  gem 'autotest'
  gem 'webrat'
  gem 'faker'
  gem 'machinist', '>= 2.0.0.beta1'
end

fixtureの代わりにblueprintを追加するように

以下をconfig/application.rbのclass TestApp::Application内に記述すると、モデルを追加したときにfixtureではなくblueprintの追加をしてくれる。

config.generators do |g|
  g.fixture_replacement :machinist
end

DBを毎回クリアする

~/.autotestに下記を記述してDBを毎回クリアする。じゃないとコケる。 「Rails3 + rspec2 その他もろもろ環境でのautotest周りの設定とか」を参照。

# オートテスト開始時にテストDBをクリアする
Autotest.add_hook :initialize do |at|
    system("rake db:test:prepare")
    next false
end

# ファイル更新時にテストDBをクリアする
Autotest.add_hook :ran_command do |at|
    system("rake db:test:prepare")
    next false
end