Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
RSpec: controller POST create
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  8 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Soichi Ishida  
View profile  
 More options Nov 12 2012, 4:21 am
From: Soichi Ishida <li...@ruby-forum.com>
Date: Mon, 12 Nov 2012 10:19:47 +0100
Local: Mon, Nov 12 2012 4:19 am
Subject: RSpec: controller POST create
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 must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Norbert Melzer  
View profile  
 More options Nov 12 2012, 4:38 am
From: Norbert Melzer <timmel...@gmail.com>
Date: Mon, 12 Nov 2012 10:37:55 +0100
Local: Mon, Nov 12 2012 4:37 am
Subject: Re: [Rails] RSpec: controller POST create

Where do you define valid attributes?

Have you tried post :plan => Factory(:plan)?
Am 12.11.2012 10:19 schrieb "Soichi Ishida" <li...@ruby-forum.com>:


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Mirri Kim  
View profile  
 More options Nov 12 2012, 4:42 am
From: Mirri Kim <mirri....@gmail.com>
Date: Mon, 12 Nov 2012 17:41:02 +0800
Local: Mon, Nov 12 2012 4:41 am
Subject: Re: [Rails] RSpec: controller POST create

On your controller, use `create!` to see what is preventing the save.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Soichi Ishida  
View profile  
 More options Nov 12 2012, 4:42 am
From: Soichi Ishida <li...@ruby-forum.com>
Date: Mon, 12 Nov 2012 10:41:25 +0100
Local: Mon, Nov 12 2012 4:41 am
Subject: Re: RSpec: controller POST create

> Where do you define valid attributes?

You mean,

   def valid_attributes
     FactoryGirl.build(:plan).attributes
   end

in plans_controller_spec.rb ?  Even if so, I am not sure if it's a right
way.

soichi

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


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Soichi Ishida  
View profile  
 More options Nov 12 2012, 5:14 am
From: Soichi Ishida <li...@ruby-forum.com>
Date: Mon, 12 Nov 2012 11:13:31 +0100
Local: Mon, Nov 12 2012 5:13 am
Subject: Re: RSpec: controller POST create

> On your controller, use `create!` to see what is preventing the save.

Sorry, I don't quite understand what you mean.

my plans_controller.rb has

  def create
    @plan = Plan.new(params[:plan])

    respond_to do |format|
      if @plan.save
        format.html { redirect_to @plan, notice: 'Plan was successfully
created.' }
        format.json { render json: @plan, status: :created, location:
@plan }
      else
        format.html { render action: "new" }
        format.json { render json: @plan.errors, status:
:unprocessable_entity }
      end
    end
  end

which scaffold generated by default.

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


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Norbert Melzer  
View profile  
 More options Nov 12 2012, 5:48 am
From: Norbert Melzer <timmel...@gmail.com>
Date: Mon, 12 Nov 2012 11:48:07 +0100
Local: Mon, Nov 12 2012 5:48 am
Subject: Re: [Rails] Re: RSpec: controller POST create

What he wants to say is that you should log or print the error-array of
your model and look what exactly doesn't fit into your validations.
Am 12.11.2012 11:13 schrieb "Soichi Ishida" <li...@ruby-forum.com>:


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Mirri Kim  
View profile  
 More options Nov 12 2012, 6:08 am
From: Mirri Kim <mirri....@gmail.com>
Date: Mon, 12 Nov 2012 19:07:32 +0800
Local: Mon, Nov 12 2012 6:07 am
Subject: Re: [Rails] Re: RSpec: controller POST create

Hi Soichi,

You can temporarily do `if @plan.save!` to raise an error instead of just
having it return false and not give you any feedback. Doing this is okay
because you should not bother testing your validations as far as the
controller is concerned (you do that on your model). In any case, try to
validate your factory first (if you plan to use
`FactoryGirl.attributes_for`) to prevent problems such as this.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Soichi Ishida  
View profile  
 More options Nov 14 2012, 5:06 am
From: Soichi Ishida <li...@ruby-forum.com>
Date: Wed, 14 Nov 2012 11:05:17 +0100
Local: Wed, Nov 14 2012 5:05 am
Subject: Re: Re: RSpec: controller POST create

> You can temporarily do `if @plan.save!` to raise an error instead of
> just
> having it return false and not give you any feedback.

the same result including

    describe "with invalid params" do
      ...

part failures.

Doing this is okay

> In any case, try to
> validate your factory first (if you plan to use
> `FactoryGirl.attributes_for`) to prevent problems such as this.

I tried

  def valid_attributes
    {
      :weight => 4,
      :flight_name_id => 55,
      :give_take => 0,
      :day_departure => "2012-12-22",
      :check_in => true
    }
  end

In other words, running the test without FactoryGirl.  But it returns

  13) PlansController POST create with valid params creates a new Plan
     Failure/Error: post :create, {:plan => valid_attributes},
valid_session
     ActiveRecord::RecordInvalid:
       Validation failed: Give take can't be blank, Flight name can't be
blank, Day departure can't be blank, Weight can't be blank

So it looks like attributes are passed properly at all.
I am completely lost here...

soichi

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


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »