web-dev-qa-db-fra.com

Factory Girl - quel est le but?

Quel est le but de Factory Girl dans les tests rspec quand je pourrais utiliser des blocs before(:each)? Il semble que la seule différence entre Factory Girl et une before(:each) est que l'usine prépare la création d'objets en dehors du test. Est-ce correct?

60
curiousdork

Des gemmes comme Factory Girl et Sham vous permettent de créer des modèles pour des objets valides et réutilisables. Ils ont été créés en réponse à des fixations qui fixaient des enregistrements qui devaient être chargés dans la base de données. Ils permettent plus de personnalisation lorsque vous instanciez les objets et ils visent à garantir que vous avez un objet valide avec lequel travailler. Ils peuvent être utilisés n'importe où dans vos tests et dans vos crochets de test avant et après.

avant (: chacun), avant (: tous), après (: chacun) et après (: tous) tous visent à vous donner un endroit pour faire la configuration et le démontage qui seront partagés entre un groupe de test. Par exemple, si vous allez créer un nouvel utilisateur valide pour chaque test, vous voudrez le faire dans votre hook avant (: chaque). Si vous voulez effacer certains fichiers du système de fichiers, vous voulez le faire dans un hook avant. Si tous vos tests créent un fichier tmp et que vous souhaitez le supprimer après votre test, vous le ferez dans votre hook après (: chaque) ou après (: tous).

La différence entre ces deux concepts est que les usines ne visent pas à créer des crochets autour de vos tests, elles visent à créer des objets et des enregistrements valides Ruby, afin que vous puissiez garder votre création d'objet flexible et sèche). Les crochets avant et après sont destinés aux tâches de configuration et de démontage qui sont partagées dans un groupe d'exemples afin que vous puissiez garder votre code de configuration et de démontage SEC.

63
Pan Thomakos

FactoryGirl remplace les appareils dans les tests. De cette façon, vous n'aurez pas à maintenir les appareils à jour lorsque vous modifiez le modèle de données. Les appareils peuvent également devenir difficiles à manier lorsque vous ajoutez des étuis Edge.

FactoryGirl génère des données à la volée et l'ajout et la suppression de champs sont beaucoup plus faciles. En outre, vous pouvez l'utiliser dans la configuration de la façon dont vous utiliseriez les appareils.

Est-ce que c'est plus clair?

16
Srdjan Pejic

les définitions de luminaires sont également globales pour l'ensemble de votre application. Les usines peuvent être locales - les données spécifiques à un cas de test isolé se trouvent donc dans la configuration de ce contexte particulier et non dans un seul fichier global d'appareils.

Ce livre couvre très bien le sujet si vous voulez plus de lecture

6
John Beynon