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

2. Usually, you make a request in controller specs, like "get :render_404". See the controller docs on the rspec site.


Hope that helps,

Scott

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to