Cette fois, je vais résumer le flux d'écriture du code de test unitaire du modèle utilisateur en introduisant rspec.
Parallèlement à cela, FactoryBot et Faker ont également été introduits et implémentés, je vais donc les décrire.
C'est un outil qui crée des données pour les tests.
Vous pouvez ajouter aléatoirement du contenu aux données créées par FactoryBot.
En guise de point, faites attention à l'emplacement du Gemfile. Pas au fond.
gemfile
group :development, :test do
gem 'rspec-rails'
gem 'factory_bot_rails'
gem 'faker'
end
après ça $ bundle install Faire.
Ensuite, exécutez la commande pour générer un répertoire pour écrire RSpec.
Terminal
rails g rspec:install
Cela devrait générer des répertoires et des fichiers.
Ensuite, écrivons ce qui suit en .rspec.
.rspec
--require spec_helper
--format documentation
Enfin, générons un fichier FactoryBot. Créez votre propre répertoire d'usines dans le répertoire spec, et cette fois, créez users.rb.
Maintenant, la préparation est OK.
Définissons chaque valeur dans le fichier créé précédemment.
spec/factories/users.rb
FactoryBot.define do
factory :user do
nickname {Faker::Name.last_name}
email {Faker::Internet.free_email}
password = Faker::Internet.password(min_length: 6)
password {password}
password_confirmation {password}
family_name { "Yamada" }
first_name {"Taro"}
read_family {"Yamada"}
read_first {"Taro"}
birth {Faker::Date.between(from: '1930-01-01', to: '2015-12-31')}
end
end
Le fait est que certains utilisent Faker et d'autres pas. Faker ne peut générer que des caractères alphanumériques de manière aléatoire. Par conséquent, nom_famille etc. ont été évalués correctement cette fois.
Il semble y avoir un bijou qui peut créer des données factices en japonais, mais cette fois, je l'ai abandonné.
Tout d'abord, en guise de préparation, générez un fichier pour écrire le code de test avec une commande.
Terminal
rails g rspec:model user
Puis spec/models/user_spec.rb Sera généré.
Écrivons ici le code de test unitaire.
user_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do
describe '#create' do
before do
@user = FactoryBot.build(:user)
end
it "Impossible de s'inscrire si le pseudo est vide" do
@user.nickname = nil
@user.valid?
expect(@user.errors.full_messages).to include("Nickname can't be blank")
end
it "Impossible de s'inscrire si l'e-mail est vide" do
@user.email = nil
@user.valid?
expect(@user.errors.full_messages).to include("Email can't be blank")
end
it "Vous ne pouvez pas vous inscrire si l'e-mail n'est pas unique" do
@user.save
another_user = FactoryBot.build(:user, email: @user.email)
another_user.valid?
expect(another_user.errors.full_messages).to include("Email has already been taken")
end
---réduction---
end
end
Comme il est long, je l'ai considérablement omis, mais je le décrirai ainsi.
Le point est Avant de faire, il faut définir correctement les données FactoryBot avec des variables d'instance. J'ai oublié cela et @user est devenu nul et je me suis perdu une fois (de amateur)
Si vous pouvez bien l'écrire, au terminal
Terminal
bundle exec rspec spec/models/user_spec.rb
Entrez une commande pour exécuter le test.
Recommended Posts