rspec rails
$ echo 'gem "rspec-rails", :group => [:development, :test]' >> Gemfile
$ rails generate rspec:install
//test
$ rake spec
$ rails generate scaffold Widgets name:string
invoke rspec
create spec/models/widget_spec.rb
invoke rspec
create spec/controllers/widgets_controller_spec.rb
create spec/views/widgets/edit.html.erb_spec.rb
create spec/views/widgets/index.html.erb_spec.rb
create spec/views/widgets/new.html.erb_spec.rb
create spec/views/widgets/show.html.erb_spec.rb
create spec/routing/widgets_routing_spec.rb
invoke rspec
create spec/requests/widgets_spec.rb
invoke rspec
create spec/helpers/widgets_helper_spec.rb
$ rails g model widge
invoke rspec
create spec/models/widge_spec.rb
create app/assets/stylesheets/mycontroller.css.scss
$ rails g controller widget
invoke rspec
create spec/controllers/widget_controller_spec.rb
invoke rspec
create spec/helpers/widget_helper_spec.rb
$ rails g integration_test widget
invoke rspec
create spec/requests/widgets_spec.rb
$ rails generate scaffold_controller Foos
invoke rspec
create spec/controllers/foos_controller_spec.rb
create spec/views/foos/edit.html.erb_spec.rb
create spec/views/foos/index.html.erb_spec.rb
create spec/views/foos/new.html.erb_spec.rb
create spec/views/foos/show.html.erb_spec.rb
create spec/routing/foos_routing_spec.rb
invoke rspec
create spec/requests/foos_spec.rb
invoke helper
create app/helpers/foos_helper.rb
invoke rspec
create spec/helpers/foos_helper_spec.rb
assignsメソッドでは、getメソッドで呼び出されたときにインスタンス変数に設定された値にアクセスするメソッドです。
before(:all) が実行されるのは最初の 1 回だけ。 before(:each) が実行されるのは各 it ごと。 どうやら、before(:each) で状態が変わっても次の it 実行時には元に戻るらしい。
factorygirl
# Factory_girl
# app/models/user.rb
class User < ActiveRecord::Base
# name:string
has_many :bookmarks
has_many :pages, :through => :bookmarks
end
# app/models/page.rb
class Page < ActiveRecord::Base
# title:string
# url:string
has_many :bookmarks
has_many :users, :through => :bookmarks
end
# app/models/bookmark.rb
class Bookmark < ActiveRecord::Base
# user_id:integer
# page_id:integer
belongs_to :user
belongs_to :page
end
# test
it "bob has two bookmarks" do
@bob = FactoryGirl.build(:bob)
@bob.should have(2).bookmarks
end
it "mike has one bookmarks" do
@mike = FactoryGirl.build(:mike)
@mike.should have(1).bookmarks
end
# spec/factories.rb
FactoryGirl.define do
Factory.define :bob, :class => User do
name "bob"
pages {
[Factory(:google),Factory(:yahoo)]
}
end
Factory.define :mike, :class => User do
name "mike"
pages {
[Factory(:google)]
}
end
Factory.define :yahoo, :class => Page do
title "Yahoo!"
url "http://www.yahoo.com/"
end
Factory.define :google, :class => Page do
title "Google"
url "http://www.google.com/"
end
end