2010-05-05 8 views
0

J'utilise Factory Girl mais j'aime la syntaxe machiniste. Alors je me demande, s'il y a un moyen de créer un plan nommé pour la classe, afin que je puisse avoir quelque chose comme ça:Nommé Blueprints avec factory_girl

User.blueprint(:no_discount_user) do 
    admin   false 
    hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383" 
    is_trader  false 
    name   "foolish" 
    salt   "21746899800.223524289203464" 
end 

User.blueprint(:discount_user) do 
    admin   false 
    hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383" 
    is_trader  true 
    name   "deadbeef" 
    salt   "21746899800.223524289203464" 
    discount_rate { DiscountRate.make(:rate => 20.00) } 
end 

DiscountRate.blueprint do 
    rate {10} 
    not_before ... 
    not_after ... 
end 

est-il un moyen faisant factory_girl avec la syntaxe de machiniste agissant comme ça? Je n'en ai pas trouvé. Aide appréciée.

Thx à l'avance Jason

Répondre

0

Oui, vous pouvez. exiger plan syntax

require 'factory_girl/syntax/blueprint' 
    Sham.email {|n| "#{n}@example.com" } 

    User.blueprint do 
    name { 'Billy Bob' } 
    email { Sham.email } 
    end 

    User.make(:name => 'Johnny') 
+0

Shingara, Je sais, thats la manière que je l'utilise. Mais la question ist, si l'on peut utiliser des plans nommés comme: User.blueprint (: no_discount_user) faire et User.blueprint (: discount_user) ne pour que je puisse appeler: utilisateur (: discount_user). faire pour créer un utilisateur avec un discountrate et Utilisateur (: no_discount_user) .make pour créer un utilisateur sans. Cela rendrait la définition d'étape de concombre beaucoup plus sèche dans mon cas. Mais il semble que je devrais passer à machiniste à la place. –

+0

Oui je pense que ce n'est pas possible. L'extension de factory_girl ne peut pas faire cela – shingara

0

Si vous concerné par vos tests de sécheresse, vous pouvez envisager active_factory plugin, que je l'ai créé. Dans ce document, vous pouvez définir une usine comme celle-ci:

factory :discount_user, :class => User do 
    admin   false 
    hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383" 
    is_trader  true 
    name   "deadbeef" 
    salt   "21746899800.223524289203464" 
    discount_rate { DiscountRate.make(:rate => 20.00) } 
end 

Une autre option serait juste « ajouter discount » dans votre test:

models { discount_rate - user - ... } 

Il créerait une association entre les deux modèles. Ainsi, vous pouvez garder vos spécifications DRY tout en évitant de créer beaucoup d'usines.

Désolé, si je ne réponds pas à votre question exactement

Questions connexes