我正在嘗試爲動作創建編寫rspec測試。控制器是OrderController。 訂單模型包含許多訂單項。我不知道我能做到這一點的呼叫:Rspec,factory_girl - 測試用has_many模型創建動作
後:創建,順序:FactoryGirl.build(:順序).attributes
但這種失敗,因爲我的驗證,即說:訂單應該有至少一個訂單項。我認爲我應該創建一個有訂單項的訂單。
非常感謝。
我正在嘗試爲動作創建編寫rspec測試。控制器是OrderController。 訂單模型包含許多訂單項。我不知道我能做到這一點的呼叫:Rspec,factory_girl - 測試用has_many模型創建動作
後:創建,順序:FactoryGirl.build(:順序).attributes
但這種失敗,因爲我的驗證,即說:訂單應該有至少一個訂單項。我認爲我應該創建一個有訂單項的訂單。
非常感謝。
您可以在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創建訂單時,您也將構建一些行。
@ User426891以上內容來自https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#associations,您可以參考FactoryGirl的更多信息。 –
您可以使用FactoryGirl構建關聯的對象。不過,你有兩個選擇:
1)手動/明確的方法 - 在這裏你通過line_items進廠電話:
FactoryGirl.build(:order, line_items: [build(:line_item), build(:line_item)]
2)自動方法 - 配置工廠總是至少包括一個行項目:
在你的工廠文件:
factory :order do
# attrs
after :build do |order, ev|
order.line_items << build(:line_item)
end
end
這將建立具有默認屬性一個默認LINE_ITEM工作。如果你想有更多具體的屬性,你必須回到使用第一種方法。
你在問什麼可以完成(使用LineItems構建Order ...)。但它不會解決你的問題。因爲您要調用的#attributes不會在返回的哈希中包含訂單項。如果需要,您應該使用文字散列或通過輔助函數生成它。我認爲在這裏使用FactoryGirl並不明智(至少從我看到的情況來看)。 – jurglic