views:

310

answers:

1

In ApplicationHelper I have such code:

def inside_layout layout = 'application', &block
  @template.instance_variable_set '@content_for_layout', capture(&block)
  concat \
    @template.render :file => "layouts/#{layout}", :use_full_path => true
end

which behaves like this:

application.html.haml:

!!!
%html
  %head
    ...
  %body
    = yield

common_pages.html.haml:

- inside_layout do
  ...

Then common_pages layout render within application layout.

How I can test this helper with RSpec?

When I call inside_layout from spec file:

helper.inside_layout { }

RSpec says error:

ActionView::MissingTemplate in 'ApplicationHelper inside_layout should render nested layout within application layout'
Missing layout layouts/application.erb in view path

But application works fine.

+2  A: 

You cannot use render-calls directly in rspecs for helpers, as the view-path is not set in that context.

Suggestions:

  • use a mock for the render-call.
  • change your code, and move your render-call out into the view-template, then only return the arguments for the render-call from the inside_layout method.

Read more: http://pivotallabs.com/users/john/blog/articles/854-friday-5-11-standup-view-paths-in-rspec-helper-tests-write-attribute-for-type-inference-

laust.rud