Je suis nouveau à FactoryGirl et j'essaie le scénario simple suivant?Factory Girl créer une association avec l'objet existant
factory :female, :class => Gender do
code 'Female'
end
factory :male, :class => Gender do
code 'Male'
end
factory :papas, :class => Customer do
first_name 'Jim'
last_name 'Papas'
association :gender, :factory => :male, :strategy => :build
end
factory :dumas, :class => Customer do
first_name 'Mary'
last_name 'Dumas'
association :gender, :factory => :female, :strategy => :build
end
Puis dans mon test:
create(:male)
create(:female)
create(:papas)
create(:dumas)
Notez que la classe client a une classe et une règle de validation assocation belongs_to
Gender
qui dit que gender_id
devrait être présent. J'ai également une validation sur Gender
classe pour l'unicité sur le code.
Sur create(:papas)
déclaration ci-dessus, dans mon test, je reçois l'erreur que le Customer
qui va être créé est pas valide, parce que gender_id
est nil
.
Si je supprime le :strategy => :build
sur Customer
:papas
association d'usine avec le sexe, alors je vais faire une erreur, que lorsque vous essayez de créer :papas
, le code pour le sexe existe déjà.
Que dois-je faire pour que mes tests créent les données comme requis ci-dessus?
Notez que je veux avoir des genres créés sans clients aussi, dans d'autres tests. Ne me dites pas de créer les clients avec des commandes de création d'usine et laissez les clients créer les genres en même temps. Cela ne fonctionnera pas si j'essaye de créer deux clients du même sexe aussi.
En outre, il doit y avoir une meilleure réponse que celle:
@male = create(:male)
@female = create(:female)
create(:papas, :gender => @male)
create(:dumas, :gender => @female)
(.? Lors de l'utilisation des appareils de ces choses étaient prêts hors-the-box Dois-je retourner à fixtures)
Bien que très bavard vs fixtures, votre réponse est correcte. J'ai utilisé usine fille les deux derniers mois et encore mon prochain projet sera avec des appareils! –
L'avantage que vous pourriez trouver avec les usines est si vous avez besoin de créer beaucoup de clients différents. Vous pouvez avoir une usine male_customer et female_customer et les utiliser comme usines parentales pour vos différents clients - cela réduit considérablement la verbosité. Heureux que ça a marché! – Shadwell