[RUBY] [Ralis] À propos du test unitaire

En premier

Je conserverai un mémorandum de la procédure lors de la réalisation d'un test unitaire de validation de modèle à l'aide de Rspc.

Qu'est-ce que Rspec

Un outil de test typique pour Ruby and Rails, un joyau utilisé pour les tests par classe ou méthode.

environnement

・ Rails 5.0.7.2 ・ Rubis 2.5.1 ・ Rspec-rails 3.9.0 ・ Factory_bot_rails 5.1.1

Préparation préalable

1. Introduction de rspec et de Factory_bot gem

gemfile

group :development, :test test do
# Je veux l'utiliser dans l'environnement de développement et l'environnement de test, donc je le décris ici.
gem 'rspec_rails'
gem 'factory_bot_gem' 

end

Si vous pouvez écrire un gem, installer le bundle

2. Créez un fichier rspec et vérifiez le fonctionnement

Au terminal

$ rails g rspec:install

Si le fichier est créé comme indiqué ci-dessous après l'exécution de la commande, c'est ok.

create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

Maintenant que le fichier a été créé, dans le terminal,

--require spec_helper
--format documentation

Ajoutez ces deux instructions au fichier .spec et exécutez la commande d'exécution rspec dans le terminal pour vérifier l'opération.

$ bundle exec rspec
# Terminal

No examples found.

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

Si une telle description apparaît dans le terminal, RSpec a démarré normalement, donc après cela, ajoutez la description du code de test au fichier sous rspec /.

Procédure de test

1. Ajoutez un dossier factories directement sous le répertoire rspec et créez-y un fichier users.rb

FactoryBot.define do

  factory :user do
    nickname        {"test"}
    email           {"[email protected]"}
    password        {"00000000"}
    family_name      {"test"}
    first_name      {"test"}
    family_name_kana    {"test"}
    first_name_kana    {"test"}
    birthday          {"2000-01-01"}
  end

end

En créant d'abord un modèle dans les factoles et en définissant la valeur, vous pouvez facilement créer une instance par une méthode spécifique dans le fichier de spécification ou l'enregistrer dans la base de données. (Vous n'êtes pas obligé de créer des données en entrant une valeur pour chaque test.)

user = FactoryBot.build(:user)

Pour facutoryBot, utilisez la méthode build ou create et spécifiez le modèle ajouté dans le dossier facutories en tant qu'argument pour obtenir la valeur définie dans le fichier ~ s.rb.

user = FactoryBot.build(:user,  email: "")

De cette manière, la valeur peut être remplacée en ajoutant la valeur du nom de colonne après le modèle.

2 Ajout de la description du test

Créez un dossier models dans le répertoire spec. Créez un fichier pour chaque modèle et effectuez un test réel.

require 'rails_helper'
describe User do
  describe 'registrations#create' do

 it "Si le pseudo est vide, il ne peut pas être enregistré" faire
      user = FactoryBot.build(:user, nickname: "" )  
      user.valid?
 expect (user.errors [: nickname]). to include ("Please enter") #include ("cannot be blank") est correct. Depuis qu'il a été converti en japonais, il ressemble à celui de gauche.
  end
end

Ceci est un ensemble de tests.

La première ligne est définie pour charger spec / rails_helper.rb. Les deuxième et troisième lignes, le groupe de do ~ se terminent immédiatement après décrivent, représente l'expression. Une expression de test pour les inscriptions # create action du modèle utilisateur. Immédiatement après, il représente un ensemble de code de test fonctionnel, et l'explication est écrite dans le "" qui le suit. (Exemple appelé) Générez un hachage sur la ligne suivante et attribuez la valeur à la variable utilisateur. Utilisez la méthode FactoryBot ici. Spécifiez le nom du modèle dans l'argument de construction et écrasez la valeur uniquement dans la colonne surnom. Si vous utilisez la méthode FactoryBot, ce qui suit aura la même valeur.


 it "Si le pseudo est vide, il ne peut pas être enregistré" faire
 user = User.new (surnom: "", email: "[email protected]", mot de passe: "00000000", nom_famille: "test", prénom: "test", nom_famille_kana: "test", prénom_kana: "test" , anniversaire: "2020-01-01") #gem inutilisé

 user = FactoryBot.build (: user, surnom: "") Lors de l'utilisation de #FactoryBot

Utilisez FactoryBotm pour qu'il ne génère pas de hachage de la valeur à chaque fois. Utilisez la méthode .valid? Pour la variable utilisateur à laquelle la valeur est affectée. Lors de l'enregistrement d'une instance d'une classe qui hérite d'ActiveRecord :: Base, cochez "Peut-elle être enregistrée par validation?". Dans le modèle User, presence: true est cette fois validée pour toutes les colonnes.

Utilisez expect (X) .to eq Y pour vérifier si la valeur de l'expression dans la partie x est égale à la valeur dans la partie Y. Ici, la méthode des erreurs est utilisée. valide? La valeur de retour de la méthode est true / false, mais si vous utilisez la méthode errors pour une instance qui utilise la méthode valid?, Vous pouvez vérifier pourquoi elle ne peut pas être enregistrée si elle ne peut pas être enregistrée en raison de la validation. ça peut.

Dans ce cas, il n'y a pas de valeur dans la colonne surnom, donc "cant be blank" est affiché. Utilisez la matrice d'inclusion pour vérifier si la valeur prise en tant qu'argument est incluse dans le tableau qui est l'argument de expect. Dans ce cas, "Je sais que si le surnom est vide, l'erreur ne peut pas être vide, alors écrivez-la comme include (" Can't be blank "). Cette inspection est passée, Ceci termine le test "Si le pseudo est vide, il ne peut pas être enregistré".

Après cela, ajoutez simplement la description du test unitaire et effectuez le test un par un.

require 'rails_helper'
describe User do
  describe 'registrations#create' do

 it "Si le pseudo est vide, il ne peut pas être enregistré" faire
      user = FactoryBot.build(:user, nickname: "" )  
      user.valid?
 expect (user.errors [: nickname]). to include ("Please enter") #include ("cannot be blank") est correct. Depuis qu'il a été converti en japonais, il ressemble à celui de droite.
    end

 it "Si l'e-mail est vide, vous ne pouvez pas vous inscrire"
      user = FactoryBot.build(:user, email: "")
      user.valid?
 expect (user.errors [: email]). to include (please enter "")
    end

 il "Impossible de s'inscrire s'il n'y a pas de" @ "dans l'e-mail" faire
      user = FactoryBot.build(:user, email: "test.gmail.com")
      user.valid?
 expect (user.errors [: email]). to include ("is an invalid value")
    end   

 il "Invalide pour les adresses e-mail en double" do
      user1 = FactoryBot.create(:user)
      user2 = FactoryBot.build(:user)
      user2.valid?
 expect (user2.errors [: email]). to include ("already exists")
    end

 il "Si le mot de passe est vide, vous ne pouvez pas vous inscrire" faire
      user = FactoryBot.build(:user, password: "" )
      user.valid?
 expect (user.errors [: password]). to include (please enter "")
    end


 il "Impossible d'enregistrer si le mot de passe est de 6 caractères ou moins" faire
      user = FactoryBot.build(:user, password: "00000")
      user.valid?
 expect (user.errors [: password]). to include ("Veuillez saisir au moins 6 caractères")
    end


 it "Si nom_famille est vide, vous ne pouvez pas vous inscrire" faire
      user = FactoryBot.build(:user, family_name: "" )  
      user.valid?
 expect (user.errors [: family_name]). to include (please enter "")
    end

 it "Si prénom est vide, vous ne pouvez pas vous inscrire" faire
      user = FactoryBot.build(:user, first_name: "" )  
      user.valid?
 expect (user.errors [: first_name]). to include (please enter "")
    end

 it "Si family_name_kana est vide, vous ne pouvez pas vous inscrire" faire
      user = FactoryBot.build(:user, family_name_kana: "" )  
      user.valid?
 expect (user.errors [: family_name_kana]). to include (please enter "")
    end

 it "Si first_name_kana est vide, vous ne pouvez pas vous inscrire" faire
      user = FactoryBot.build(:user, first_name_kana: "" )  
      user.valid?
 expect (user.errors [: first_name_kana]). to include (please enter "")
    end

 il "Si l'anniversaire est vide, vous ne pouvez pas vous inscrire"
      user = FactoryBot.build(:user, birthday: "" )  
      user.valid?
 expect (user.errors [: birthday]). to include (please enter "")
    end

  end
end

Le test de validation du modèle utilisateur est effectué ci-dessus.

Les références

・ Https://programming-beginner-zeroichi.jp/articles/61 ・ Https://www.sejuku.net/blog/47847 ・ Htps: // Ce m / shojikishindoi / n / n 5019bc64c254

Recommended Posts

[Ralis] À propos du test unitaire
Test unitaire Java avec Mockito
À propos du test d'application RSpec (test unitaire)
À propos =
Test unitaire sous l'environnement d'installation Active Storage