我有一個FactoryGirl工廠,創建一個Order
但之前(:創建)回調不會產生關聯的工廠對象:FactoryGirl(:創建)回調沒有創造協會
父類
class Order < ActiveRecord::Base
attr_accessible :tax, :total
has_many :order_lines
validates :user, presence: true
validates :order_lines , presence: true
end
子類
class OrderLine < ActiveRecord::Base
attr_accessible :order, :product, :qty
belongs_to :order
belongs_to :product
...
...
validates :order, presence: true
end
廠
Factory :order do
...
ignore do
number_or_order_lines 1
end
before(:create) do |order, evaluator|
FactoryGirl.create_list :order_line, evaluator.number_or_order_lines, order: order
end
end
Factory :order_line do
association :user
association :order
...
end
問題
在我的RSpec的測試,如果我創建一個訂單對象:
describe Order do
before {@order = FactoryGirl.create(:order) } => #throws error (see below)
end
錯誤 的ActiveRecord :: RecordInvalid 驗證失敗令行可以不要變成空白
UPDATE
我可以然而成功地做到以下但顯然僅完成創建一個:
after(:build) do |order, evaluator|
order.order_lines << FactoryGirl.build(:order_line, order: order)
end
假設 - 我能看到的create_list
可能試圖保存OrderLine
這將導致一個錯誤,因爲父母沒有被保存 - 但我不知道它是否仍然返回一個處於無效狀態的OrderLine對象,因此order對象上的order_lines集合仍然不應該爲空。
嘗試使用後(:編譯)之前,而不是(:創建) –
更新與新的信息的問題 - 我已經試過了之後(:build)以及使用build_list而不是create_list。不幸的是,如果在Order模型上驗證order_lines,它將會工作的唯一方法。 – pghtech
我面臨同樣的問題 –