On your controller, use `create!` to see what is preventing the save. On Mon, Nov 12, 2012 at 5:19 PM, Soichi Ishida <li...@ruby-forum.com> wrote:
> 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. > > > -- 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.