descriptive assert_template error when partial wasn't rendered

When `assert_template` is used with the :locals option, and the
partial was not rendered, a method_missing error was raised.
This changes first checks, if the partial actually was rendered
and raises a descriptive error.
This commit is contained in:
Yves Senn 2012-12-15 20:20:34 +01:00
parent e16110c4b8
commit c21ab338cb
3 changed files with 16 additions and 0 deletions

@ -127,6 +127,9 @@ def assert_template(options = {}, message = nil)
if expected_locals = options[:locals]
if defined?(@_rendered_views)
view = expected_partial.to_s.sub(/^_/,'')
partial_was_not_rendered_msg = "expected %s to be rendered but it was not." % view
assert_includes @_rendered_views.rendered_views, view, partial_was_not_rendered_msg
msg = 'expecting %s to be rendered with %s but was with %s' % [expected_partial,
expected_locals,
@_rendered_views.locals_for(view)]

@ -134,6 +134,10 @@ def locals_for(view)
@rendered_views[view]
end
def rendered_views
@rendered_views.keys
end
def view_rendered?(view, expected_locals)
locals_for(view).any? do |actual_locals|
expected_locals.all? {|key, value| value == actual_locals[key] }

@ -329,6 +329,15 @@ class RenderTemplateTest < ActionView::TestCase
assert_template partial: '_partial', locals: { 'second' => '2' }
end
test 'raises descriptive error message when template was not rendered' do
controller.controller_path = "test"
render(template: "test/hello_world_with_partial")
e = assert_raise ActiveSupport::TestCase::Assertion do
assert_template partial: 'i_was_never_rendered', locals: { 'did_not' => 'happen' }
end
assert_match "i_was_never_rendered to be rendered but it was not.", e.message
assert_match 'Expected ["/test/partial"] to include "i_was_never_rendered"', e.message
end
end
module AHelperWithInitialize