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

L’introduction de Factory Girl définit 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!

La méthode create() conserve l’instance du modèle alors que la méthode build() conserve uniquement en mémoire.

Personnellement, j’utilise la méthode create() uniquement lorsque la persistance est vraiment nécessaire puisque l’écriture dans la firebase database rend le test beaucoup plus long.

par exemple

Je crée des utilisateurs à l’authentification avec create() car mon moteur d’authentification interroge la firebase database.

Pour vérifier si un modèle possède un atsortingbut, la méthode build() car aucun access à la firebase database n’est requirejs.

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

Mettre à jour

“Il y a une exception qui crée réellement” crée “quand vous construisez des associations, c’est-à-dire que votre association n’est plus en mémoire mais persiste. Gardez cela à l’esprit” – Shakes

Utiliser FactoryGirl.build(:factory_name) ne persiste pas sur la firebase database et n’appelle pas save! , vos validations d’enregistrement actif ne seront donc pas exécutées. C’est beaucoup plus rapide, mais les validations peuvent être importantes.

L’utilisation de FactoryGirl.create(:factory_name) persistera dans la firebase database et appellera les validations Active Record. Ceci est évidemment plus lent mais peut attraper des erreurs de validation (si vous en tenez compte dans vos tests).

FactoryGirl.create() créera un nouvel object et de nouvelles associations (si la fabrique en a). Ils seront tous conservés dans une firebase database. En outre, il déclenchera les validations de modèle et de firebase database. Les rappels after(:build) et after(:create) seront appelés après l’enregistrement de la fabrique. Aussi before(:create) sera appelé avant que l’usine soit enregistrée.

FactoryGirl.build() ne sauvegarde pas un object, mais fera quand même des demandes à une firebase database si la fabrique possède des associations. Il ne déclenchera des validations que pour les objects associés. Le rappel after(:build) sera appelé après la after(:build) la fabrique.

Notez que dans la plupart des cas, lorsque vous testez des modèles, il est préférable d’utiliser build_stubbed pour de meilleures performances. En savoir plus à ce sujet ici .