簡體   English   中英

RSpec中的測試視圖產量

[英]Test View Yield in RSpec

我有一個視圖布局文件,當前產生:

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文件,而僅更改我如何調用render函數?

是否存在更清潔的方式?

我通常會在控制器渲染模板時測試模板的輸出。

按照您的方法,您可以參考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但實際上不是必需的。

我會說這已經是一個干凈的解決方案。

如果您重復幾次此操作,最終可以在測試套件中添加一個幫助器模塊(請參閱此答案

如果您的template.html.slim是正確的,則您的測試應能按預期進行。 (我在苗條的回購中發現了這個相當老的問題以供參考)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM