Rails Rspec默认视图测试无法分配模型存根

时间:2014-05-26 04:22:25

标签: ruby-on-rails-4 rspec2

我正在尝试了解构建脚手架时生成的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,也不直接访问任何创建的存根。 任何帮助表示赞赏:)

0 个答案:

没有答案