6

我有一個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集合仍然不應該爲空。

+4

嘗試使用後(:編譯)之前,而不是(:創建) –

+0

更新與新的信息的問題 - 我已經試過了之後(:build)以及使用build_list而不是create_list。不幸的是,如果在Order模型上驗證order_lines,它將會工作的唯一方法。 – pghtech

+0

我面臨同樣的問題 –

回答

6

你需要把你的訂單行的工廠到訂單記錄這樣

Factory :order do 
    ... 
    ignore do 
     number_or_order_lines 1 
    end 
    before(:create) do |order, evaluator| 
     order.order_lines << (FactoryGirl.create :order_line, order: order) 
    end 
    end 
+1

謝謝這幫了我:) – 2015-08-08 15:03:17