[rspec-users] issue with application controller spec

David Chelimsky dchelimsky at gmail.com
Sat Sep 6 10:51:27 EDT 2008


On Sat, Sep 6, 2008 at 8:55 AM, Craig Jolicoeur <cpjolicoeur at gmail.com> wrote:
>>>First off - should_receive *is* a test - why would you write a test in
> the setup?
>
> Not sure what you mean by that.  I'm not writing a test in the setup
> routine.

should_receive is an expectation which could pass or fail. I think
that's what Scott meant by writing a test in setup (before(:each)).
It's something you generally want to avoid because it makes it more
difficult to understand failures if they're not right in the actual
code examples.

> Also, I'm not setting an expectation on a method call.  should
> render_file is in the right place.

You're not *now*, but you could.

>
> On Sep 5, 11:48 pm, Scott Taylor <mailing_li... 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
>>
>> 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-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list