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.
Un outil de test typique pour Ruby and Rails, un joyau utilisé pour les tests par classe ou méthode.
・ Rails 5.0.7.2 ・ Rubis 2.5.1 ・ Rspec-rails 3.9.0 ・ Factory_bot_rails 5.1.1
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
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 /.
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.
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.
・ Https://programming-beginner-zeroichi.jp/articles/61 ・ Https://www.sejuku.net/blog/47847 ・ Htps: // Ce m / shojikishindoi / n / n 5019bc64c254