[rspec-users] issue with application controller spec

Scott Taylor mailing_lists at railsnewbie.com
Fri Sep 5 23:48:29 EDT 2008


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



More information about the rspec-users mailing list