1
以下是我在documentation發現:如何使用rspec 3.3測試每個對象的部分渲染?
require "rails_helper"
RSpec.describe "widgets/index" do
it "displays all the widgets" do
assign(:widgets, [
Widget.create!(:name => "slicer"),
Widget.create!(:name => "dicer")
])
render
expect(rendered).to match /slicer/
expect(rendered).to match /dicer/
end
end
但它不會有所作爲,如果我寫這篇文章的觀點
<%= render @widgets %>
或本
<% @widgets.each do |widget| %>
<p><%= widget.name %></p>
<% end %>
然後我決定試試這個(來源相同):
require "rails_helper"
RSpec.describe "rendering locals in a partial" do
it "displays the widget" do
widget = Widget.create!(:name => "slicer")
render "widgets/widget", :widget => widget
expect(rendered).to match /slicer/
end
end
,但它僅適用於渲染一個對象,即對
<%= render @product %>
而不是
<%= render @products %>
那麼,如何測試我的部件列表呈現局部的每個部件?
但問題是一樣的(雖然它變得更理論)。如果我可以呈現一種類型的部分('<%= render @product%>'),我如何呈現另一種類型('<%= render @products%>')? –
嗯(我可能在這裏記得不正確),但是在你的第一個例子中('<%= render @product%>'),Rails將查找一個名爲_product.html.erb的部分名稱,如果找不到。在第二個例子中,我認爲會發生完全相同的事情(雖然我不完全確定)。爲了驗證這一點,嘗試創建一個'_products.html.erb'部分並刪除'_product.html.erb'部分。爲了確保你呈現'_products.html.erb',你需要明確地調用它'<%= render'products',locals:{products:@products}%>'。這有道理嗎? – nicohvi