[rspec-users] issue with application controller spec

David Chelimsky dchelimsky at gmail.com
Sat Sep 6 04:41:36 EDT 2008


On Fri, Sep 5, 2008 at 10:48 PM, Scott Taylor
<mailing_lists at railsnewbie.com> 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 at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list