提交 0460b3a4 编写于 作者: P Prem Sichanugrist

Fix bug in assert_template when using only `:layout` option

Currently if you're do this:

    assert_template :layout => "foo"

Regardless of what layout you were using, the test will always pass. This was broken since the introduction of :layout option in [d9375f3f].

We have a lot of test cases in actionpack/test/controller/layout_test.rb that use this feature. This will make sure that those test cases are not true negative.
上级 885a5993
......@@ -86,6 +86,21 @@ def assert_template(options = {}, message = nil)
end
end
when Hash
if expected_layout = options[:layout]
msg = build_message(message,
"expecting layout <?> but action rendered <?>",
expected_layout, @layouts.keys)
case expected_layout
when String
assert(@layouts.keys.include?(expected_layout), msg)
when Regexp
assert(@layouts.keys.any? {|l| l =~ expected_layout }, msg)
when nil
assert(@layouts.empty?, msg)
end
end
if expected_partial = options[:partial]
if expected_locals = options[:locals]
actual_locals = @locals[expected_partial.to_s.sub(/^_/,'')]
......@@ -98,19 +113,6 @@ def assert_template(options = {}, message = nil)
"expecting ? to be rendered ? time(s) but rendered ? time(s)",
expected_partial, expected_count, actual_count)
assert(actual_count == expected_count.to_i, msg)
elsif options.key?(:layout)
msg = build_message(message,
"expecting layout <?> but action rendered <?>",
expected_layout, @layouts.keys)
case layout = options[:layout]
when String
assert(@layouts.include?(expected_layout), msg)
when Regexp
assert(@layouts.any? {|l| l =~ layout }, msg)
when nil
assert(@layouts.empty?, msg)
end
else
msg = build_message(message,
"expecting partial <?> but action rendered <?>",
......
......@@ -71,6 +71,10 @@ def render_text_with_custom_content_type
render :text => "Hello!", :content_type => Mime::RSS
end
def render_with_layout
render "test/hello_world", :layout => "layouts/standard"
end
def session_stuffing
session['xmas'] = 'turkey'
render :text => "ho ho ho"
......@@ -471,6 +475,18 @@ def test_fails_with_incorrect_symbol
end
end
def test_fails_with_wrong_layout
get :render_with_layout
assert_raise(ActiveSupport::TestCase::Assertion) do
assert_template :layout => "application"
end
end
def test_passes_with_correct_layout
get :render_with_layout
assert_template :layout => "layouts/standard"
end
def test_assert_template_reset_between_requests
get :hello_world
assert_template 'test/hello_world'
......
......@@ -167,7 +167,7 @@ def test_layout_is_not_set_when_none_rendered
def test_layout_is_picked_from_the_controller_instances_view_path
@controller = PrependsViewPathController.new
get :hello
assert_template :layout => /layouts\/alt\.\w+/
assert_template :layout => /layouts\/alt/
end
def test_absolute_pathed_layout
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册