[rspec-users] get to a different controller

David Chelimsky dchelimsky at gmail.com
Thu Jan 7 02:27:11 EST 2010


On Wed, Jan 6, 2010 at 8:53 PM, Phillip Koebbe <phillipkoebbe at gmail.com>wrote:

>
>
> Wincent Colaiuta wrote:
>
>>
>> Well, there is more than one way to skin a cat, but the thing I like about
>> my proposed solution is that:
>>
>> - the specification of the behavior appears in the "describe" block that
>> corresponds to the controller where the behavior is implemented
>>
>> - but given that the implementing controller is an abstract one, you
>> actually test the behavior where it is actually exercised (ie. in the
>> subclasses)
>>
>> - you don't need to make a fictional controller which isn't actually part
>> of your application purely for testing purposes
>>
>> Looking at the gist you pasted it looks like it could be very
>> straightforward to test, especially if you're using a RESTful access
>> pattern.
>>
>> Your admin controllers all inherit from your abstract base class, and if
>> they're RESTful you know before you even start which actions they'll respond
>> to (the usual index, new, create etc). Perhaps they only respond to a
>> subset; but even if they only respond to one ("show" or "index", say) you
>> have enough of a common basis to test that the require_admin before filter
>> is actually hit and does what you think it should (ie. you only need to hit
>> "show" or "index", there is no need to test all actions).
>>
>> Cheers,
>> Wincent
>>
>>
> Are you basically saying that you wouldn't worry about testing the
> before_filter in the base_controller at all? Maybe part of the reason I am
> not "getting this" is my lack of familiarity with shared behaviors. If I
> share the behavior in the base_controller_spec, will it get tested when I
> run that spec? If it won't, then my concern is moot. If it will, then I'm
> just as confused as I was before.
>

A shared example group is a lot like a module. It is only run when it is
invoked in a non-shared example group:

**********************************
SPECS:

shared_examples_for "any controller" do
  it "does something shared" { ... }
end

describe SpecificController do
  it_should_behave_like "any controller"
  it "does something specific" { ... }
end
**********************************
OUTPUT:

SpecificController
  does something shared
  does something specific
**********************************
Does that clear anything up?

Cheers,
David


> Peace,
> Phillip
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20100107/ee986e0a/attachment-0001.html>


More information about the rspec-users mailing list