2015-06-14 5 views
9

Ist es möglich, ein Standardmerkmal in FactoryGirl zu definieren? Wenn ich eine Fabrik wie folgt aus (in dem beide question_response belongs_to Frage) definieren:Verwenden eines 'Standard' Merkmals in FactoryGirl, um unnötige Assoziationserzeugung zu vermeiden

factory :question_response do 
    question 
    work_history 

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

Wenn ich FactoryGirl.create :question_response, :open tun wird es zunächst eine Standard-Frage erstellen und dann eine andere innerhalb der Eigenschaft erzeugen, die eine unnötige Operation ist.

Im Idealfall würde Ich mag, dies zu tun:

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 

Und dann FactoryGirl.create :question tun wird das Standardmerkmal verwenden, aber es scheint nicht möglich zu sein.

Antwort

2

Als ich FactoryGirl.create tun: question_response,: öffnen Sie es zuerst eine Standardfrage erstellen und dann eine andere innerhalb der Eigenschaft erstellen

Es ist nicht wahr. Wenn Sie das Merkmal mit question angeben, wird das Factory-Verhalten vor der Erstellung überschrieben, sodass keine Standardfrage erstellt wird.

Ich überprüfte es mit FactoryGirl v4.5.0

+0

Danke, Sie haben recht! Ich habe das gerade selbst verifiziert. Ich frage mich, ob das kürzlich zu Factory Girl hinzugefügt wurde ... –

0

Ihr Zug einen zweiten Datensatz erstellen, da Sie einen Block haben, die einen Datensatz zu erstellen:

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

Stattdessen können Sie ein Merkmal auf Frage definieren kann, die die Frage Typ festgelegt ist, und dann haben Sie Ihre question_response verwende diese Frage mit dem offenen Merkmal als Standard.

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

factory.define :question_response do 
    association :question, :open 
end