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:
parent
e16110c4b8
commit
c21ab338cb
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user