On Fri, Sep 5, 2008 at 10:48 PM, Scott Taylor <[EMAIL PROTECTED]> wrote: > > On Sep 5, 2008, at 10:18 PM, Craig P Jolicoeur wrote: > >> I'm having some trouble trying to spec some methods in my Rails >> application controller. >> >> I'm new to rspec converting over from straight test::unit. >> >> Here is the method in my application.rb controller that I'm trying to spec >> >> def render_403 >> logger.debug "Returned 403: #{request.request_uri}" >> render :file => "#{RAILS_ROOT}/public/403.html", :status => '403' >> end >> >> >> Here is my *current* spec >> >> >> describe "handling render 403" do >> >> before(:each) do >> controller.request.should_receive(:request_uri).and_return('response >> request_uri') >> end > > First off - should_receive *is* a test - why would you write a test in the > setup? > >> >> it "should render the 403 error page" do >> controller.render_403 >> response.should render_file("#{RAILS_ROOT}/public/403.html") >> end > > Two issues with this test: > > 1. Normally, if you are going to write a test checking that a method is > called on an object (should_receive), you'd write that assertion before you > perform any action. For example: > > an_object.should_receive(:a_method_call) > an_object.a_method_call > > would pass > > but > > an_object.a_method_call > an_object.should_receive(:a_method_call) > > would fail
"should render_file" is not a mock expectation, it's a post-action, more state-based expectation, so Craig's got this bit right in this case. > 2. Usually, you make a request in controller specs, like "get :render_404". > See the controller docs on the rspec site. I think this is the crux of the problem. Craig, you'd probably learn a lot by running these code examples with the -b flag to get a full backtrace. > Hope that helps, It does :) HTH too, David > > Scott > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users