[RUBY] [RSpec] Utilisons FactoryBot [Rails]

Qu'est-ce que Factory Bot? ??

--Une bibliothèque qui facilite la création de données pour les tests --ʻUtiliser l'enregistrement actif`

Ceci et cela de Factory Bot

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.

Utilisez un peu FactoryBot.

Passer outre

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.

Gérez des valeurs uniques.

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

[RSpec] Utilisons FactoryBot [Rails]
[rails] Faisons un test unitaire avec Rspec!
Utilisons jcmd
Principes de base de Rspec [Rails]
[Rails5] Rspec -validation-
[Rails] Utiliser jQuery
[Rails] Test avec RSpec
Utiliser Webmock avec Rspec
Utiliser des images avec des rails
Rails, procédure d'installation RSpec
[Swift] Utilisons l'extension
[Rails / RSpec] Ecrire un test de modèle (avec Shoulda Matchers / FactoryBot)
J'ai essayé un test unitaire de l'application Rails en utilisant RSpec et FactoryBot
[Rails] Comment utiliser enum
[RSpec] Maîtrisons Factory Bot
[Swift] Utilisons le contrôle segmenté
[Rails] Comment utiliser enum
[spring] Utilisons Spring Data JPA
Comment utiliser la jonction de rails
[Rails] Code de test à l'aide de Rspec
Utilisez plusieurs bases de données avec Rails 6.0
[Rails] Comment utiliser la validation
[Rails] À propos du test de réponse Rspec
[Rails] Comment utiliser authenticate_user!
Utilisez plusieurs cases à cocher dans Rails6!
[Docker] À utiliser à tout moment avec Docker + Rails
[Rails] Comment utiliser Scope
[Rails] Comment utiliser la "devise" des gemmes
[Rails] Comment utiliser les messages flash
Utilisons Set more [Collections Framework]
Présentation de l'application de révision de livres Rails RSpec
Comment utiliser Ruby on Rails
Utilisons Twilio en Java! (Introduction)
Utilisons la réflexion Accès aux méthodes privées
[Rails] Utiliser des cookies en mode API
Utilisons-le après avoir compris sudo!
[Rails5] Rspec -Test d'unité lors de l'imbrication-
[Rails] Comment utiliser Active Storage
[Introduction aux rails] Comment utiliser le rendu
[RSpec] Test unitaire (avec gem: factory_bot)
[Pour les débutants Rails] Résumé de l'utilisation de RSpec (obtenir un aperçu)