是否可以使用带有Rails的RSpec测试给定布局的使用,例如我想要一个执行以下操作的匹配器:
response.should use_layout('my_layout_name')
我在谷歌搜索时找到了一个use_layout匹配器,但它不起作用,因为响应或控制器似乎都没有匹配器正在寻找的布局属性.
David Chelimsky在Ruby论坛上发表了一个很好的答案:
response.should render_template("layouts/some_layout")
这适用于Rails上的边缘Rails和边缘RSpec:
response.layout.should == 'layouts/application'
不应该把它变成适合你的匹配器.
已经有一个完美的功能匹配器:
response.should render_template(:layout => 'fooo')
(Rspec 2.6.4)
我找到了一个如何编写use_layout
匹配器的例子.这是链接消失的代码:
# in spec_helper.rb class UseLayout def initialize(expected) @expected = 'layouts/' + expected end def matches?(controller) @actual = controller.layout #@actual.equal?(@expected) @actual == @expected end def failure_message return "use_layout expected #{@expected.inspect}, got # {@actual.inspect}", @expected, @actual end def negeative_failure_message return "use_layout expected #{@expected.inspect} not to equal # {@actual.inspect}", @expected, @actual end end def use_layout(expected) UseLayout.new(expected) end # in controller spec response.should use_layout("application")
为了使这项工作,我必须编写以下内容:
response.should render_template("layouts/some_folder/some_layout", "template-name")