From ed9567401dfc7b476bf9ccac82826fc63283f708 Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Mon, 8 Oct 2012 22:22:47 +0200 Subject: recognizes when a partial was rendered twice. Closes #3675 --- actionpack/lib/action_controller/test_case.rb | 14 ++++++++++---- actionpack/lib/action_view/test_case.rb | 13 ++++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb index ace5a2c822..6aa43edf47 100644 --- a/actionpack/lib/action_controller/test_case.rb +++ b/actionpack/lib/action_controller/test_case.rb @@ -123,11 +123,17 @@ module ActionController if expected_partial = options[:partial] if expected_locals = options[:locals] - if defined?(@locals) - actual_locals = @locals[expected_partial.to_s.sub(/^_/,'')] - expected_locals.each_pair do |k,v| - assert_equal(v, actual_locals[k]) + if defined?(@_locals) + actual_locals_collection = @_locals[expected_partial.to_s.sub(/^_/,'')] + result = actual_locals_collection.any? do |actual_locals| + expected_locals.each_pair.all? do |k,v| + v == actual_locals[k] + end end + msg = 'expecting %s to be rendered with %s but was with %s' % [expected_partial, + expected_locals, + actual_locals_collection] + assert(result, msg) else warn "the :locals option to #assert_template is only supported in a ActionView::TestCase" end diff --git a/actionpack/lib/action_view/test_case.rb b/actionpack/lib/action_view/test_case.rb index 5434b3421e..6e5a3a63ca 100644 --- a/actionpack/lib/action_view/test_case.rb +++ b/actionpack/lib/action_view/test_case.rb @@ -120,7 +120,7 @@ module ActionView end def locals - @locals ||= {} + @_locals ||= {} end included do @@ -162,12 +162,15 @@ module ActionView case options when Hash if block_given? - locals[options[:layout]] = options[:locals] + locals[options[:layout]] ||= [] + locals[options[:layout]] << options[:locals] elsif options.key?(:partial) - locals[options[:partial]] = options[:locals] + locals[options[:partial]] ||= [] + locals[options[:partial]] << options[:locals] end else - locals[options] = local_assigns + locals[options] ||= [] + locals[options] << local_assigns end super @@ -197,7 +200,7 @@ module ActionView :@_routes, :@controller, :@_layouts, - :@locals, + :@_locals, :@method_name, :@output_buffer, :@_partials, -- cgit v1.2.3