On Jun 14, 2010, at 7:05 PM, David Chelimsky wrote: > On Jun 14, 2010, at 6:40 PM, Marcelo de Moraes Serpa wrote: > >> Hey guys. >> >> I would like to test the following behavior: >> >> render :update do |page| >> page.replace_html 'errors', :partial => 'signup_errors', :locals >> => { :errors => 'errors'} >> end >> } >> >> I'm doing: >> >> controller.should_receive(:render).with(:update) >> >> But I am not sure on how to test the block. Maybe checking out what is the >> class of the page var and setting up an expection on it? > > Hmmm. The common idiom for this is: > > page = double('page') > controller.stub(:render).with(:update).and_yield(page) > page.should_receive(:replace_html).with(...) > > This does not seem to work with rspec-2/rails-3. Don't know why yet (won't be > able to look for a bit), but my guess is that something (like rspec :) ) is > adding render() to the controller even later than this stub does. I'll follow > up if I learn something.
Looks like action_pack calls render twice (the 2nd time in action_controller/metal/implicit_render.rb:10:in `default_render'), so we've got to stub the :render call twice: page = double('page') controller.stub(:render) controller.stub(:render).with(:update).and_yield(page) page.should_receive(:replace_html).with(...) Bummer. It seems like this is a rails bug (render should only get called once, and there is code that prevents it from being called twice, but not _all_ of the time), but I'm not sure if I can make that case or not. I'll try :) Cheers, David _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users