2015-06-14 28 views
9

是否可以在FactoryGirl中定義默認特質?如果我這樣定義一個工廠(其中兩個question_response belongs_to的問題):在FactoryGirl中使用'默認'特性以避免不必要的關聯創建

factory :question_response do 
    question 
    work_history 

    trait :open do 
    question { FactoryGirl.create :question, question_type: 'open' } 
    end 
end 

當我做FactoryGirl.create :question_response, :open它會首先創建一個默認問題,然後創建另一個特質,這是不必要的操作中。

理想我想這樣做:

factory :question_response do 
    work_history 

    trait :default do 
    question { FactoryGirl.create :question, question_type: 'yes_no' } 
    end 

    trait :open do 
    question { FactoryGirl.create :question, question_type: 'open' } 
    end 
end 

,然後做FactoryGirl.create :question將使用默認的特質,但它似乎並不可能。

回答

2

當我做FactoryGirl.create:question_response,:打開它首先會創建一個默認的問題,然後創建另一個性狀

這不是真的裏面。如果使用question指定特徵,它將在創建之前覆蓋工廠行爲,以便它不會創建默認問題。

我使用FactoryGirl v4.5.0對其進行了檢查

+0

謝謝,你說得很對!我剛剛證實了這一點。我不知道這是最近添加到工廠女孩... –

0

你的特質是創建第二個記錄,因爲您有創建記錄塊:

trait :open do 
    question { FactoryGirl.create :question, question_type: 'open' } 
end 

相反,你可以做的是有問題的類型設置問題定義特徵,然後有你question_response將這個問題與開放特質作爲默認值使用。

factory.define :question do 
    trait :open do 
    question_type 'open' 
    end 
end 

factory.define :question_response do 
    association :question, :open 
end 
相關問題