Ruby on Rails
Friday, May 25, 2012
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: 'random@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
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: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' dologin_userbefore { post :create, @attributes }it 'should create a new post' dopost = mock(Post, @attributes)assigns(:post).should_not be_nilPost.should_receive(:save).and_return(post) response.should redirect_to successful_submitted_posts_path endit 'should NOT create a new post' doendendcontext 'when NOT logged in' dobefore { post :create, @attributes }it { response.should_not be_successful }it { response.should redirect_to new_user_session_path }endendBut it's failing and I don't get understand why.1) PostsController#create when logged in should create a new postFailure/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 seconds6 examples, 1 failurewhy 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-8class PostsController < ApplicationControllerload_and_authorize_resourcebefore_filter :authenticate_user!respond_to :htmldef new@post = Post.newenddef create@post = current_user.posts.build(params[:post]) if @post.saveredirect_to successful_submitted_posts_path elserender :newendenddef successful_submitted; endendWhat 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+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment