[RUBY] [RSpec] Test unitaire (avec gem: factory_bot)

Présentation de RSpec

Veillez à ne pas dupliquer la console Web

Gemfile


gem 'rspec-rails'

group :development do
  gem 'web-console'
end

Après bundle install rails g rspec: install`

Modifiez le fichier .rspec pour l'afficher dans un format facile à lire comme suit:

.rspec


--format documentation

À ce stade, vérifions si RSpec fonctionne correctement. bundle exec rspec

Terminal


Si cela fonctionne normalement, ce sera comme ça
No examples found.


Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures

Fichier à créer

.rspec spec spec/spec_helper.rb Comme rails_helper.rb, il s'agit d'un fichier qui écrit les paramètres communs pour RSpec, mais il est utilisé lors de l'utilisation de RSpec sans Rails.

spec/rails_helper.rb Il s'agit d'un fichier pour écrire les paramètres courants lors de l'utilisation de RSpec dans Rails. Appliquer les paramètres et méthodes courants en lisant ce fichier dans chaque fichier de test

Introduction de factory_bot_rails

Gemfile


group :development, :test do
  #réduction
  gem 'rspec-rails'
  gem 'factory_bot_rails'
end

** Créer un fichier ** Créez un fichier Ruby avec le nom de fichier au pluriel de l'instance créée Créé cette fois pour qu'il devienne spec / factories / ʻusers.eb`.

** Modifier le fichier ** Facilitez la création d'une instance ou enregistrez-la dans la base de données par une méthode spécifique dans le fichier de spécifications

user.rb


FactoryBot.define do

  factory :user do
    nickname              {"abe"}
    email                 {"[email protected]"}
    password              {"00000000"}
    password_confirmation {"00000000"}
  end

end

Méthode de base factory_bot

** méthode de construction ** Créer une instance du nom de classe pris comme type de symbole comme argument basé sur la description de factory_bot

Exemple


#factory_Lorsque vous n'utilisez pas de bot
user = User.new(nickname: "abe", email: "[email protected]", password: "00000000", password_confirmation: "00000000")
#factory_Lors de l'utilisation du bot
user = FactoryBot.build(:user)

** méthode de création ** Cela fonctionne presque de la même manière que build, mais dans le cas de create, la valeur est enregistrée dans la base de données de test. Le test est exécuté une fois et le contenu du DB de test est annulé à chaque fois qu'il est terminé.

Exemple


#L'instance créée est enregistrée dans le DB
user = FactoryBot.create(:user)

Omission de la notation factory_bot

Lors de la création d'une instance avec factory_bot, vous pouvez omettre la description de FactoryBot de la classe qui est le receveur.

rails_helper.rb


#réduction
RSpec.configure do |config|
  #Ajout de la description suivante
  config.include FactoryBot::Syntax::Methods

  #réduction

end

Ecrire le code de test pour le modèle

Code de test du «modèle utilisateur» ** Création d'un fichier de spécifications ** Convention de dénomination de fichier nom de classe correspondant_spec.rb

Créez pour qu'il devienne spec / models / user_spec.rb.

user_spec.rb


require 'rails_helper'
describe User do
  describe '#create' do
    it "Impossible de s'inscrire sans pseudo" do
      user = build(:user, nickname: "")
      user.valid?
      expect(user.errors[:nickname]).to include("can't be blank")
    end
  end
end

Description du code

describe describe crée un ensemble de tests immédiatement après do ~ end. Dans le "" qui suit la description, écrivez une description du groupe.

** it et exemple ** il représente un ensemble de code de test fonctionnel appelé exemple. Écrivez une description de l'exemple dans le "" qui le suit.

** Attente ** C'est la formule qui est réellement évaluée. Écrivez entre les deux. Dans la formule ci-dessus, ʻattendre (user.errors [: nickname]). Inclure ("ne peut pas être vide") ʻest l'attente.

** Matcher ** Affiche les conditions dans lesquelles le test réussira dans l'attente.

Méthode

valid? Cochez "Est-il dans un état où il ne peut pas être enregistré en raison de la validation?" La valeur de retour de la méthode est true / false

errors Si vous utilisez la méthode des erreurs pour une instance qui utilise la méthode valide?, Vérifiez pourquoi elle ne peut pas être enregistrée si elle ne peut pas être enregistrée en raison de la validation.

Matcher

include Vous pouvez vérifier si la valeur prise comme argument est incluse dans le tableau qui est l'argument de expect Motif en double: a déjà été pris Motif vide: ne peut pas être vide Modèle de caractère insuffisant: est trop court Motif avec trop de caractères: est trop long

be_valid Il passe lorsque l'instance définie comme argument de expect efface toutes les validations. Exemple ci-dessous

sample_spec.rb


it "Peut être enregistré si le pseudo comporte 6 caractères ou moins" do
  user = build(:user, nickname: "aaaaaa")
  expect(user).to be_valid
end

eq S'ils sont égaux, ils réussiront. Exemple ci-dessous

sample_spec.rb


describe "sum" do
  it "1 +1 devient 2" do
    expect(1 + 1).to eq 2
  end
end

Recommended Posts

[RSpec] Test unitaire (avec gem: factory_bot)
Test unitaire d'architecture avec ArchUnit
[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
Téléchargement d'images à l'aide de CarrierWave ~ Test Rspec ~
[Rails5] Rspec -Test d'unité lors de l'imbrication-
À propos du test d'application RSpec (test unitaire)
[rails] Faisons un test unitaire avec Rspec!
Demande de Json dans le test unitaire du contrôleur à l'aide de MockMvc
[Rails] De la préparation du test au test unitaire du modèle [RSpec]
Exécution du code de test RSpec
Comment faire un test unitaire avec JVM sur une source à l'aide de RxAndroid
Procédure de création du code de test unitaire RSpec (création de l'utilisateur de connexion Ver.)
Échantillon de bibliothèque de tests unitaires Java
[Rails] Test avec RSpec
Testez Nokogiri avec Rspec.
Faites un test unitaire avec Junit.
Comment écrire dynamiquement des cas de test itératifs à l'aide de test / unit (Test :: Unit)
[RSpec] Utilisez WebMock pour tester la logique à l'aide d'une API externe
Créez plusieurs instances ensemble à partir de FactoryBot avec RSpec à l'aide de create_list
[RSpec] Utilisons FactoryBot [Rails]
[IntelliJ IDEA] Effectuer un test d'unité
Tester Active Strage avec RSpec
Introduction à Micronaut 2 ~ Test unitaire ~
Suppression logique grâce à la paranoïa des gemmes
Tester le résolveur GraphQL avec rspec
[Rails] À propos du test de réponse Rspec
[Ruby On Rails] Lors de l'exécution d'un test d'unité de modèle avec RSpec à l'aide de FactoryBot, une erreur se produit car la clé externe n'est pas saisie.