Hi,

I've changed my test a little bit so the only error I getting is the 
following one:

Failures:

  1) PostsController#create when logged in failure should render the NEW 
template
     Failure/Error: response.should render_template :new
       expecting <"new"> but rendering with <"">
     # ./spec/controllers/posts_controller_spec.rb:70:in `block (5 levels) 
in <top (required)>'

Finished in 1.27 seconds
7 examples, 1 failure


And the modified test:

    describe '#create' do
      
      @attributes = { post: { id: 1, title: 'New post', description: 
'Please add some text here', location: 'Anywhere' } }

      context 'when logged in' do 

        before do 
          @user = FactoryGirl.create(:user, email: 'ran...@example.com')
          sign_in @user 

          @post = mock(Post, 
                      title: 'New post', 
                      description: 'Please add some text here', 
                      location: 'Anywhere')

          # expected
          controller.current_user.posts.stub!(:build).and_return(@post)
        end

        context 'success' do 
          before { @post.should_receive(:save).and_return(true) }

          it 'should create a instance variable' do 
            post :create, @attributes
            assigns(:post).title.should be_eql 'New post'
          end

          it 'should redirect to the success page' do 
            post :create, @attributes
            response.should redirect_to successful_submitted_posts_path
          end
        end

        context 'failure' do 
          before { @post.should_receive(:save).and_return(false) }

          it 'should render the NEW template' do 
            post :create, { post: { id: 1, title: 'New post', description: 
'Please add some text here', location: 'Anywhere' } }
            response.should render_template :new
          end
        end
      end


I've been googling for this yesterday and it seems that I need to add 
somewhere an error hash, so it will render the new template instead of 
doing a redirect.



Em quinta-feira, 24 de maio de 2012 22h33min46s UTC-3, Tyler escreveu:
>
> I assume you are trying to mock the Post to separate it from the 
> controller action.  You may have better luck with the double/stub 
> nomenclature:
>
> https://github.com/rspec/rspec-mocks/blob/master/README.md
>
> http://rubydoc.info/gems/rspec-mocks/frames
>
>
>
> On Wednesday, May 23, 2012 10:51:38 AM UTC-7, Kleber Shimabuku wrote:
>>
>> Hi guys,
>>
>> I'm starting to write tests and I writing a functional test for my 
>> 'create' action.
>>
>> So, basically I have the following test:
>>
>>   describe '#create' do
>>     
>>     @attributes = { title: 'New post', description: 'Please add some text 
>> here', location: 'Anywhere' }
>>
>>     context 'when logged in' do 
>>       login_user
>>       before { post :create, @attributes }
>>
>>       it 'should create a new post' do 
>>         post = mock(Post, @attributes)
>>         assigns(:post).should_not be_nil
>>         Post.should_receive(:save).and_return(post)
>>         response.should redirect_to successful_submitted_posts_path
>>       end
>>       it 'should NOT create a new post' do 
>>       end
>>     end
>>
>>     context 'when NOT logged in' do
>>       before { post :create, @attributes }
>>       it { response.should_not be_successful }
>>       it { response.should redirect_to new_user_session_path }
>>     end
>>
>>   end
>>
>> But it's failing and I don't get understand why.
>>
>> 1) PostsController#create when logged in should create a new post
>>      Failure/Error: post = mock(Post, @attributes)
>>      ArgumentError:
>>        wrong number of arguments (3 for 2)
>>      # ./spec/controllers/posts_controller_spec.rb:40:in `block (4 
>> levels) in <top (required)>'
>>
>> Finished in 0.77996 seconds
>> 6 examples, 1 failure
>>
>> why mock method expects 3 arguments? what they should be?
>>
>> I have read on some blogs this kind of syntax.
>>
>> mock(Object, hash)
>>
>>
>> And this is my controller:
>>
>> # encoding: utf-8
>> class PostsController < ApplicationController
>>   load_and_authorize_resource
>>   before_filter :authenticate_user!
>>   respond_to :html
>>
>>   def new
>>     @post = Post.new
>>   end
>>
>>   def create
>>     @post = current_user.posts.build(params[:post])
>>     if @post.save
>>       redirect_to successful_submitted_posts_path
>>     else
>>       render :new
>>     end
>>   end
>>
>>   def successful_submitted; end
>> end
>>
>>
>> What I'm doing wrong?
>>
>> Please give me some hints.
>>
>> Thank you.
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-talk/-/7TfbF7sRwDwJ.
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 this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to