我有一个目前产生的视图布局文件:
Layout.html.slim:
html
header
[content]
= yield :page_content
footer
[content]
然后是一个格式相同的模板文件。
template.html.slim:
- content_for :page_content
#hello
我希望能够在不测试布局上的任何内容的情况下测试模板的内容。我发现如果我创建一个rake布局文件,我可以在rspec中执行以下操作:
describe "template.html.slim", type: :view do
it "should render a div" do
render template: 'template', layout: 'test_yielder'
expect(rendered).to have_tag("#hello")
end
end
其中test_yielder
是一行文件:
= yield :page_content
虽然这可以完成工作,但我想知道是否有更简洁的方法来测试template
的内容,而无需创建额外的test_yielder
文件,只更改我调用{{{ 1}}功能?
是否存在更清洁的方式?
答案 0 :(得分:1)
我通常在控制器渲染时测试模板的输出。
按照您的方法,您可以参考view_spec。
在规范/视图中查看规范,并单独呈现视图模板。
# app/views/widgets/widget.html.erb <h2><%= @widget.name %></h2> # spec/views/widgets/widget.html.erb_spec.rb require "spec_helper" describe "rendering the widget template" do it "displays the widget" do assign(:widget, stub_model(Widget, name: "slicer")) render template: "widgets/widget.html.erb" rendered.should contain("slicer") end end
这可以在不考虑任何布局的情况下工作。最后,您可以指定render template: 'something', layout: false
但不是真的需要。
我想说这已经是一个干净的解决方案了。
如果您多次重复此操作,最终可以在测试套件中添加辅助模块(请参阅this answer)
如果您的template.html.slim
是正确的,那么您的测试应该按预期工作。 (我在slim repo上发现这个非常古老的问题以供参考)