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

 1) 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

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to