[rspec-users] Rspecing this simple controller it is driving me mad...

roberto belardo backslash451 at yahoo.it
Sun Apr 6 10:03:40 EDT 2008


Thank you very much for you quick answer! Naturally
now it works. 
Thanks for the long version note too. I already know
that, and my code is just a test to play with rspec,
but i really appreciate your note.

Thank you for your help, see you the next problem,
Roberto. :-)


--- Jarkko Laine <jarkko at jlaine.net> ha scritto:

> 
> On 6.4.2008, at 14.20, roberto belardo wrote:
> 
> > Hi all,
> > here i am again with this stupid problem in
> rspecing
> > this controller action:
> >
> > ------------------------------------
> > CommentsController
> > def create
> >  @comment = Comment.new(params[:comment])
> >  @user = User.find(params[:user_id])
> >
> > [16]  @comment.author = @user
> >
> >  @comment.save
> > end
> >
> > ------------------------------------
> > CommentsController Spec
> > describe CommentsController, "handling POST
> /comments"
> > do
> >
> >  before(:each) do
> >    @user = mock_model(User, :to_param => "2")
> >    @comment = mock_model(Comment, :to_param =>
> "1",
> > :author => @user)
> >
> >
> >
>
User.should_receive(:find).at_least(1).times.and_return(@user)
> >
> >    Comment.stub!(:new).and_return(@comment)
> >
> >  end
> >
> >  def post_with_successful_save
> >    @comment.should_receive(:save).and_return(true)
> >
> > [34]post :create, :user_id => @user_id, :comment
> => {}
> >
> >  end
> >
> >  it "should create a new comment" do
> >    Comment.should_receive(:new).with({
> > }).and_return(@comment)
> > [47]post_with_successful_save
> > 	@comment.author.should be(@user)
> >  end
> >
> > end
> >
> > The frustrating error Rspec gave to me is this:
> >
> > Spec::Mocks::MockExpectationError in
> > 'CommentsController handling POST /comments should
> > create a new comment'
> > Mock 'Comment_1002' received unexpected message
> > :author= with (#<User:0x..fdb9c1a8e
> > @name="User_1000">)
> > comments_controller.rb:16:in `create'
> > comments_controller_spec.rb:34:in
> > `post_with_successful_save'
> > comments_controller_spec.rb:47:
> >
> >
> > I have tried to google for something like this but
> i
> > resolved nothing. Could someone help me
> understanding
> > my fault?
> 
> Short answer: you haven't stubbed the author= method
> for the comment  
> mock, only author.
> 
> A bit longer answer: Are you sure you can trust the
> user to only  
> submit valid user ids? With your current code,
> anyone can change the  
> user_id parameter in the call and fake any user id
> she wants. This  
> might be intentional (if there are only admin users
> in your app), just  
> pointing it out. You can also simplify your action
> by just saying  
> @user.comments.create(params[:comment]) once you
> have the user fetched.
> 
> Cheers,
> //jarkko
> 
> >
> > Thanks in advance,
> > Roberto.
> >
> >
> >      Inviato da Yahoo! Mail.
> > La casella di posta intelligente.
> > http://it.docs.yahoo.com/mail/overview/index.html
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> 
> --
> Jarkko Laine
> http://jlaine.net
> http://dotherightthing.com
> http://www.railsecommerce.com
> http://odesign.fi
> 
> 
> > _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users



      Inviato da Yahoo! Mail. 
La casella di posta intelligente.
http://it.docs.yahoo.com/mail/overview/index.html


More information about the rspec-users mailing list