112 votes

Quelle est la différence entre les méthodes de compilation et de création dans FactoryGirl?

L’introduction de Factory Girl décrit la différence entre FactoryGirl.build() et FactoryGirl.create() :

 # Returns a User instance that's not saved
user = FactoryGirl.build(:user)

# Returns a saved User instance
user = FactoryGirl.create(:user)
 

Je ne comprends toujours pas les différences pratiques entre les deux. Quelqu'un peut-il donner un exemple où vous voudriez utiliser l'un et pas l'autre? Merci!

148voto

Helio Santos Points 3307

L' create() méthode persiste l'instance du modèle lors de l' build() méthode permet de conserver uniquement sur la mémoire.

Personnellement, j'utilise l' create() méthode uniquement lorsque la persistance est vraiment nécessaire depuis la rédaction de la DB fait des essais de temps.

par exemple

Je créer des utilisateurs pour l'authentification avec l' create() parce que mon authentification des requêtes de moteur de la DB.

Pour vérifier si un modèle a un attribut de l' build() méthode ne cause pas de DB d'accès est nécessaire.

it{Factory.build(:user).should respond_to(:name)}

Mise à jour

"Il y a une exception qui construisent en fait "crée" quand vous êtes associations du bâtiment, j'.e votre association ne sont plus dans la mémoire, mais a persisté. Gardez cela à l'esprit" – Shakes

21voto

chasm Points 51

L'utilisation de FactoryGirl.build (: nom_usine) ne persiste pas dans la base de données et n'appelle pas save, vos validations ActiveRecord ne seront donc pas exécutées. C'est beaucoup plus rapide, mais les validations peuvent être importantes.

Utiliser FactoryGirl.create (: nom_usine) persistera sur la base de données et appellera les validations ActiveRecord. Ceci est évidemment plus lent, mais peut contenir des erreurs de validation (si vous en tenez compte dans vos tests).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X