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/-/13CxFWLAGgIJ.
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