[RUBY] [Rails] Code de test unitaire pour le modèle utilisateur

introduction

J'ai implémenté le code de test en utilisant un gem appelé Rspec. Cette fois, nous avons confirmé le comportement du système normal et du système anormal pour le code de test unitaire de la fonction d'enregistrement utilisateur.

table des matières

1 Installation des gemmes requises 2 Description de FactoryBot 3 Écriture du code de test

1. Installation des gemmes requises

Ajoutez ce qui suit dans ** group: development ,: test ** of the gemfile. Ensuite, exécutez l'installation du bundle.

gemfile


gem 'pry-rails'
gem 'rspec-rails'
gem 'factory_bot_rails'
gem 'faker'

Ensuite, créez un répertoire pour écrire Rspec.

Terminal
rails g rpsec:install

Une fois exécutés, le répertoire et le fichier seront générés comme indiqué ci-dessous.

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

Décrit de vérifier le résultat du code de test sur le terminal.

.rspec


--format documentation

2. Description de FactoryBot

FactoryBot est un joyau qui peut contenir des instances ensemble. Créez un répertoire factories dans le répertoire spec et créez-y un fichier user.rb. Modifiez user.rb comme suit.

spec/factories/user.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 }
  end
end

Faker est une gemme qui produit des valeurs aléatoires.

3. Écriture du code de test

Modifiez spec / models / user_spec.rb comme suit.

spec/models/user_spec.rb


require 'rails_helper'

RSpec.describe User, type: :model do
  describe User do
    before do
      @user = FactoryBot.build(:user)
    end
    describe 'Enregistrement d'un nouvel utilisateur' do
      context 'Lorsque la nouvelle inscription est réussie' do
        it 'pseudo et email, mot de passe et mot de passe_Si la confirmation existe, vous pouvez vous inscrire' do
          expect(@user).to be_valid
        end
        it 'Vous pouvez vous inscrire si votre mot de passe contient 6 caractères ou plus' do
          @user.password = '123456'
          @user.password_confirmation = '123456'
          expect(@user).to be_valid
        end
      end

      context 'Quand la nouvelle inscription ne se passe pas bien' do
        it 'Ne peut pas être enregistré si le pseudo est vide' do
          @user.nickname = nil
          @user.valid?
          expect(@user.errors.full_messages).to include('Veuillez saisir un pseudo')
        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('Veuillez entrer votre email')
        end
        it 'Impossible de s'inscrire s'il y a des e-mails en double' do
          @user.save
          another_user = FactoryBot.build(:user, email: @user.email)
          another_user.valid?
          expect(another_user.errors.full_messages).to include('L'email existe déjà')
        end
        it 'Impossible de s'inscrire si le mot de passe est vide' do
          @user.password = nil
          @user.valid?
          expect(@user.errors.full_messages).to include('s'il vous plait entrez votre mot de passe')
        end
        it 'mot de passe même si le mot de passe existe_La confirmation ne peut pas être enregistrée si elle est vide' do
          @user.password_confirmation = ''
          @user.valid?
          expect(@user.errors.full_messages).to include('Le mot de passe (pour confirmation) et l'entrée du mot de passe ne correspondent pas')
        end
        it 'Impossible de s'inscrire si le mot de passe est de 5 caractères ou moins' do
          @user.password = '12345'
          @user.password_confirmation = '12345'
          @user.valid?
          expect(@user.errors.full_messages).to include('Veuillez saisir le mot de passe d'au moins 6 caractères')
        end
      end
    end
  end
end

Exécutez le code de test avec la commande suivante.

Terminal
bundle exec rspec spec/models/user_spec.rb 

Cette fois, le message d'erreur est rédigé en japonais car «rail-i18n» est utilisé. En utilisant un gem appelé pry-rails, l'exécution du code de test est interrompue à mi-chemin et le message d'erreur est confirmé.

Lien de référence

https://github.com/rspec/rspec-rails https://github.com/faker-ruby/faker

Recommended Posts

[Rails] Code de test unitaire pour le modèle utilisateur
Remarques sur la génération de données factices pour les mots de passe dans le code de test unitaire du modèle Rails
[Rspec] Flux de l'introduction de Rspec à l'écriture du code de test unitaire pour le modèle
[Rails] De la préparation du test au test unitaire du modèle [RSpec]
Après l'introduction de RSpec, jusqu'à ce que vous commenciez à écrire le code de test unitaire pour le modèle
Procédure de création du code de test unitaire RSpec (création de l'utilisateur de connexion Ver.)
[Rails] Code de test à l'aide de Rspec
[Rails5] Rspec -Test d'unité lors de l'imbrication-
[rails] Faisons un test unitaire avec Rspec!
[R Spec on Rails] Comment écrire du code de test pour les débutants par les débutants
Introduire RSpec et écrire le code de test unitaire
Quel est le test de code de test de modèle
[Ruby on Rails] Test de modèle avec RSpec
J'obtiens des erreurs: l'utilisateur doit exister dans le test du modèle unitaire
Articles et livres utiles pour étudier le code de test
Utilisez [Rails] pour concevoir la fonction utilisateur invité (pour le portefeuille)
Test du tutoriel sur les rails
[Pour les débutants] Testez l'enregistrement des utilisateurs avec RSpec
[Rails] Comment implémenter un test unitaire d'un modèle
[Rails] Association de modèles (Association)
Comment écrire un test unitaire pour Spring Boot 2
[Rails / RSpec] Ecrire un test de modèle (avec Shoulda Matchers / FactoryBot)
Erreur de test Rails5 Rspec ArgumentError: Usine non enregistrée: utilisateur
Association de modèles dans Rails
Échantillon de bibliothèque de tests unitaires Java
[Tester l'apprentissage / la sortie du code]
[Rails] Test avec RSpec
Que faire si vous obtenez une erreur «302» dans le code de test du contrôleur dans Rails
Faites un test unitaire avec Junit.
Utilisez Spring Test + Mockito + JUnit 4 pour le test unitaire Spring Boot + Spring Retry
Créer une API de tableau d'affichage avec autorisation de certification dans Rails 6 # 11 Test et validation du modèle utilisateur ajoutés