Everything seemed so fine, but when i tried to
investigate a little i discovered this tremendous
behaviour of the spec:
------------------------------- CommentsController
def create
@comment = Comment.new(params[:comment])
@user = User.find(params[:user_id])
@comment.author = 'foooooobar'
@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)
@comment.stub!(:author=)
end
def post_with_successful_save
@comment.should_receive(:save).and_return(true)
@comment.should_receive(:author=)
post :create, :user_id => @user_id, :comment => {}
end
it "should create a new comment" do
Comment.should_receive(:new).with({}).and_return(@comment)
post_with_successful_save
@comment.author.should be(@user)
end
end
------------------------------- Autotest:
... 0 failures
How can the spec pass if i test that @comment.author
should be @user but in the controller i set a
fooooobar string in the @comment.author?
Better question: wich is the right way to test that
create action to be sure, it will set the author of
the comment?
--- Jarkko Laine <[EMAIL PROTECTED]> ha scritto:
...
> 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
> > [email protected]
> > 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
> [email protected]
> 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
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users