--Une bibliothèque qui facilite la création de données pour les tests --ʻUtiliser l'enregistrement actif`
Si vous installez factory_bot_rails
, vous pouvez créer un fichier pour créer factory
avec la commande suivante.
bin/rails g factory_bot:model task
Je vais vous expliquer un peu.
Jusqu'à bin / rails g
devrait être bien. Apparaissent explicitement dans le modèle avec factory_bot: model
. Veuillez spécifier la cible comme «tâche».
Lorsque vous exécutez cette commande, vous devriez voir un fichier comme celui-ci dans spec / factories / tasks.rb
.
spec/factories/tasks.rb
FactoryBot.define do
factory :task do
end
end
Vous avez un modèle. Définissons les données ici.
spec/factories/tasks.rb
FactoryBot.define do
factory :task do
name "Achats"
content "Allez acheter le dîner"
end
end
C'est peut-être moins, mais ça devrait aller. En exécutant FactoryBot.create (: task)
dans le fichier de test, vous pouvez créer les données décrites dans spec / factories / tasks.rb
.
Par exemple, si vous souhaitez écrire un test anormal qui génère une erreur lorsque «nom» de la «tâche» est «nil», vous pouvez écrire comme suit.
spec/models/task_spec.rb
#Invalide s'il n'y a pas de nom.
it "is invalid without a name" do
task = FactoryBot.build(:task, name: nil)
task.valid?
expect(task.errors[:name]).to include("can't be blank")
end
En écrasant la propriété sur «nil», elle a l'air comme prévu.
Par exemple, l'hydromel doit être unique, il a une telle spécification et vous devez écrire un tel test. Cependant, «FactoryBot» fait toujours référence à la même valeur, il peut donc ne pas être possible de gérer un tel événement.
Ce problème peut être résolu en utilisant ** Séquence ** comme indiqué ci-dessous.
spec/factories/users.rb
FactoryBot.define do
factory :user do
name "Yamada"
sequence(:email) { |n| "test#{n}@example.com" }
end
end
En le définissant ainsi, il sera défini comme test1 @ example.com
, test2 @ example.com
.
Très pratique.
Recommended Posts