Thank you, David! One small follow-up question. Is there is a way to mock an object "@comment" in the controller_spec for the function? I didn't manage to do it.
def destroy @destroy_id = @comment.id #to be used in rendering partial @comment.destroy end Looks like assigns[:comment] = mock("comment") works only for views? Thank you, Evgeny On Feb 23, 8:32 pm, David Chelimsky <dchelim...@gmail.com> wrote: > On Fri, Feb 20, 2009 at 10:17 AM, Evgeny Bogdanov > > <evgeny.bogda...@gmail.com> wrote: > > Hello, > > > I am trying to implement the following scenario, but I am stuck ... > > The thing is I want to initialize a variable @comment when the stub > > function "find_comment" is called. > > The way I do it below doesn't work, since > > "before_filter :find_comment" returns true/false and @comment > > initialization is done inside it. Could you please give me a hint how > > to do it? > > > One solution would be to use > > Comment.stub!(:find).and_return(@comment) and do not use the stub > > find_comment. > > That's the way to do it. > > > But how to do it in general, when there is no expression like "@var = > > my_var.function" in the controller and variable @var is defined in > > another place and controller just uses it. > > In general, it's best to avoid dealing directly with internal state on > an object that you're specifying and only manipulate its state through > public methods and/or mocks/stubs on collaborators. So in this case, > I'd just stub Comment.find, as mentioned above. > > > my_var.stub!(:function).and_return(@var) doesn't seem to be working. > > > Is there is something like > > my_var.stub!(:function).add_variable(@var).and_return(:true) > > Nope. For the reasons stated above. This is too invasive. > > Cheers, > David > > > > > ? > > > Thank you, > > Evgeny > > =============controller_file > > before_filter :find_comment, :only => [:destroy] > > > def destroy > > �...@destroy_id = @comment.id #to be used in rendering partial > > �...@comment.destroy > > > respond_to do |format| > > format.js > > end > > end > > > def find_comment > > @comment = Comment.find(:first, :conditions => ['id= ?',params > > [:comment_id]]) > > end > > ===============spec_file > > spec code > > describe CommentsController, "while deleting a comment" do > > it "should render destroy.rjs in case of success" do > > �...@comment = mock_model(Comment) > > �...@comment.stub!(:id).and_return(1) > > �...@comment.stub!(:destroy).and_return(:true) > > > controller.stub!(:find_comment).and_return(@comment) > > > # execute ajax request > > request.env["HTTP_ACCEPT"] = "application/javascript" > > post :destroy, :comment_id => 1, :item_id => 1, :item_type => > > "Space" > > > response.should render_template("destroy") > > end > > end > > _______________________________________________ > > rspec-users mailing list > > rspec-us...@rubyforge.org > >http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users