Rails 3.1.3
rspec-rails (2.11.4)
rspec 2.11.1
I am new to rspec. I don’t quite understand tests for POST create part.
I have generated scaffold, and simultaneously it generated
controller_spec.rb as well.
it "assigns a newly created plan as @plan" do
post :create, {:plan => valid_attributes}, valid_session
assigns(:plan).should be_a(Plan)
assigns(:plan).should be_persisted
end
is the default POST create test. It raises a failure, if I changed the
validations of Plan
class Plan < ActiveRecord::Base
validates :give_take, :presence => true
validates :flight_name_id, :presence => true
validates :day_departure, :presence => true
validates :weight, :presence => true
end
The failure message is
- PlansController POST create with valid params assigns a newly
created plan as @plan
Failure/Error: assigns(:plan).should be_persisted
expected persisted? to return true, got false./spec/controllers/plans_controller_spec.rb:117:in `block (4
levels) in <top (required)>’
If my understanding is correct, be_persisted is testing if the newly
created model instance is properly stored in DB.
I understand that my way is rather opposite: building test methods after
setting actual codes. But first I need to understand RSpec.
I have also setup FactoryGirl
FactoryGirl.define do
factory :plan do
sequence(:give_take) { |n| [ 0, 1 ][n%2] }
sequence(:weight) { | n | n }
sequence(:check_in) { |c| [ true, false ][c%2] }
sequence(:flight_name_id) { |n| n }
day_departure Date.new(2012, 12, 1)
end
end
which does work.
Question:
Can you show me how to pass the object to create method WITH valid
attributes?
Thanks in advance
soichi