[rspec-users] How to Spec a Module to be used in a Controller

Matt Wynne matt at mattwynne.net
Fri Oct 24 03:15:19 EDT 2008


On 23 Oct 2008, at 13:51, Stephen Eley wrote:

> On Thu, Oct 23, 2008 at 7:00 AM, Matt Wynne <matt at mattwynne.net>  
> wrote:
>>
>> This is working OK, but I'm struggling with the routing so that I  
>> can use
>> the integration session #get method to spin up my FakeController.
>
> Is that strictly necessary?  Your fake controller's never going to get
> routed to in real life, so testing that isn't important.  Why not just
> put things in the params[] array that matter to your module and call
> the controller method directly?  (I.e., don't call "get :index" --
> just call "index.")

I guess not, but when I'm doing things that work with the  
ActionController lifecycle, like listening for callbacks etc, I'd  
prefer my specs to to depend too much on the interaction with  
ActionController's internals.

> Another option would be to skip the fake controller, put the tests for
> your module into a shared behavior spec, and include that shared
> behavior in the spec for every controller that uses the module with
> it_should_behave_like.  You'd be testing the module's behavior a few
> times over, but you'd be doing it in the real controllers that really
> use it.

Yeah, I have been doing this, but it's starting to feel like a  
headache to debug - the specs feel like they are a long way away from  
the code. Do you know what I mean?


More information about the rspec-users mailing list