0

アクション create の rspec テストを書こうとしています。コントローラーは OrderController です。Order モデルには多くの項目があります。この呼び出しを行う方法がわかりません:

post :create, order: FactoryGirl.build(:order).attributes

しかし、私の検証では、次のように述べられているため、これは失敗します。注文には少なくとも 1 つの項目が必要です。ラインアイテムを持つオーダーを作成する必要があると思います。

どうもありがとう。

4

2 に答える 2

1

factory_girl で関連付けを定義できます。

factory :order_line do
    #some attributes

    order
end

factory :order do
    #some attributes        

    #the line's count you want to create
    ignore do
      lines_count 5
    end

    after(:create) do |order, evaluator|
      FactoryGirl.create_list(:order_line, evaluator.lines_count, order: order)
    end
end

したがって、factory_girl を使用して注文を作成すると、いくつかの行も作成されます。

于 2013-08-19T03:24:26.633 に答える
1

関連するオブジェクトを FactoryGirl で構築できます。ただし、次の 2 つのオプションがあります。

1.) 手動/明示的なアプローチ - ここでは、line_items をファクトリ コールに渡します。

FactoryGirl.build(:order, line_items: [build(:line_item), build(:line_item)]

2.) 自動アプローチ - 少なくとも 1 つの項目を常に含めるように factory を構成します。

あなたの工場ファイルで:

factory :order do
  # attrs

  after :build do |order, ev|
    order.line_items << build(:line_item)
  end 
end

これは、デフォルトの属性を持つ 1 つのデフォルトの line_item を作成する場合に機能します。より具体的な属性が必要な場合は、最初のアプローチを使用するようにフォール バックする必要があります。

于 2013-08-21T17:19:42.587 に答える