[rspec-users] Integrate or isolate views?

Ben Mabey ben at benmabey.com
Sun Jun 28 13:27:15 EDT 2009

On Jun 28, 2009, at 8:32 AM, Jesse Crockett wrote:

> Hello,
> I've been trying for two years to pick up BDD.  I'm making progress,
> have just read through the chapters in The RSpec Book on spec'ing  
> views
> and controllers.
> What is the difference between using integrate_views and doing what
> seems to be a lot of extra work to test the views in isolation?
> When I use integrate_views, can I write view spec in what would
> otherwise be isolated controller spec?

Correct, by default RSpec's controller specs will not render the  
view.  This allows you to test the controller and view in complete  
isolation.  By turning on integrate_views you can specify what the  
rendered view should contain at the same time.  If you were to do  
outside-in dev starting from the view you would start out by writing  
an isolated view spec.  That spec would say that such and such would  
be displayed.  This would in turn prompt you to assign something to  
that view for it to be rendered.  That is then your signal that the  
controller needs to assign that object.  So, you go up a level and  
make sure that the controller action is assigning the needed object  
for the view.  That object will most likely have to answer to some  
methods used in the view so that prompts you to start writing examples  
on the model level.  Isolation has it's benefits, however an  
integration test (i.e. Cucumber scenario) is really needed to make  
sure these parts are all working together as expected.

> I read that I'm "encouraged" to do these in isolation, but IMHO the
> chapter on spec'ing views is not very convincing in its own right, it
> tells me that it's good, but doesn't show me as much, compared to the
> examples and descriptions of circumstance that make several other
> chapters very convincing.

FWIW Jesse, you are not alone on this list in thinking that view specs  
are not that valuable.  A lot of people share your opinion, and I  
think Cucumber is generally used to specify the views the majority of  
the time.  This enables you to specify your controllers in isolation  
since your Cucumber features are cutting through the entire stack.  I  
personally think  view specs are a very nice tool to have available,  
but I would only use them on complex views.  By complex I don't mean  
riddled with logic, but a view that has a lot of stuff going on which  
is hard to set up all in one integration test (or Cucumber scenario).   
Since the majority of views are very simple then verifying them just  
in Cucumber is good enough, IMO.


More information about the rspec-users mailing list