Вот версия кода dmcnally, которая не позволяет передавать аргументы, делая работу «should use_layout» и «should_not use_layout» (утверждать, что контроллер использует любой макет, или нет макета соответственно), из которых я бы ожидать только второй, чтобы быть полезным, как вы должны быть более конкретными, если он использует макет):
class UseLayout
def initialize(expected = nil)
if expected.nil?
@expected = nil
else
@expected = 'layouts/' + expected
end
end
def matches?(controller)
@actual = controller.layout
#@actual.equal?(@expected)
if @expected.nil?
@actual
else
@actual == @expected
end
end
def failure_message
if @expected.nil?
return 'use_layout expected a layout to be used, but none was', 'any', @actual
else
return "use_layout expected #{@expected.inspect}, got #{@actual.inspect}", @expected, @actual
end
end
def negative_failure_message
if @expected.nil?
return "use_layout expected no layout to be used, but #{@actual.inspect} found", 'any', @actual
else
return "use_layout expected #{@expected.inspect} not to equal #{@actual.inspect}", @expected, @actual
end
end
end
def use_layout(expected = nil)
UseLayout.new(expected)
end
Это то же самое, что я нашел, и из моих тестов он, похоже, не работал, поскольку в ответе (или контроллере) нет атрибута макета из того, что я можно видеть. – DEfusion 2008-09-21 13:56:59
А, кажется, есть способ макета, но он принимает некоторые аргументы. Я подумаю над тем, что такое решение. – Otto 2008-09-21 14:15:56
On Rails 2.2.2 теперь и отлично работает – DEfusion 2009-02-21 19:55:35