我正在尝试了解构建脚手架时生成的Rspec默认视图规范,以及他们为什么不这样做。工作。 我在用; Rails 4.0.2 Rspec 2.14.7
spec/views/line_items/new.html.erb_spec.rb
require 'spec_helper'
describe "line_items/new" do
before(:each) do
assign(:line_item, stub_model(LineItem,
:product => nil,
:cart => nil
).as_new_record)
end
it "renders new line_item form" do
render
assert_select "form[action=?][method=?]", line_items_path, "post" do
assert_select "input#line_item_product[name=?]", "line_item[product]"
assert_select "input#line_item_cart[name=?]", "line_item[cart]"
end
end
end
Rspec似乎无法识别line_item。 LineItem上没有任何验证可以防止创建新的。 在索引规范中,assign确实创建了有效的line_items,但我只能通过@_encapsulated_assigns实例变量访问它们。
spec/views/line_items/index.html.erb_spec.rb
require 'spec_helper'
describe "line_items/index" do
before(:each) do
assign(:line_items, [
stub_model(LineItem,
:product => nil,
:cart => nil
),
stub_model(LineItem,
:product => nil,
:cart => nil
)
])
end
it "renders a list of line_items" do
render
line_item = @_encapsulated_assigns[:line_items].first
assert_select "tr>td>a[href=?]", line_item_path(line_item)
assert_select "tr>td>a[href=#{line_item_path(line_item)}]", text: "Show"
end
end
Rspec 2.14文档中的示例不包括asset_select或assign .as_new_record,也不直接访问任何创建的存根。 任何帮助表示赞赏:)