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: '[email protected]')
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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.