[rspec-users] get to a different controller
phillipkoebbe at gmail.com
Wed Jan 6 10:17:33 EST 2010
Wincent Colaiuta wrote:
> I test inherited stuff with shared behaviors. It might be something
> you could use here.
> Basically, I have a bunch of behavior in my ApplicationController, for
> example, and in my spec/controllers/application_controller_spec.rb
> file I have a bunch of blocks like this:
> describe ApplicationController, 'protected methods', :shared => true do
> describe ApplicationController, 'parameter filtering', :shared =>
> true do
> And I then group them all together in one more shared behavior:
> describe ApplicationController, :shared => true do
> it_should_behave_like 'ApplicationController protected methods'
> it_should_behave_like 'ApplicationController parameter filtering'
> And finally in all subclasses which inherit I can now just do:
> describe ArticlesController do
> it_should_behave_like 'ApplicationController'
> So the behavior inherited from the superclass is specified, but it is
> also tested independently by the inheriting subclasses.
> I imagine the same idea might be adaptable in some way for your use case.
Thanks for the input. I like the idea of the shared behavior so it gets
tested at all points of execution. [And I really enjoyed David's "Yay!",
too. :) ] I am going to keep that in mind as I go forward. In this
particular case, my dilemma was how to test the behavior in the
base_controller to begin with. The problem stemmed from the fact that
there were no actions in the controller to call so I couldn't do a get
on it. With Matt and David's help, I have achieved what I was originally
after. The gist is updated if you are interested:
I'm not sure how to share the behavior now, though. As I look at the
context that implements the testing of the before_filter, sharing it
doesn't seem to make sense since it creates a bogus derived class to do
the testing. If I share the behavior to real derived controllers, it
doesn't seem to me that they will, in fact, be tested.
Do you have any thoughts on that?
More information about the rspec-users