[RUBY] Introduire RSpec et écrire le code de test unitaire

Aperçu

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.

Qu'est-ce que FactoryBot

C'est un outil qui crée des données pour les tests.

Qu'est-ce que Faker

Vous pouvez ajouter aléatoirement du contenu aux données créées par FactoryBot.

Introduction et préparation de gemme

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.

Spécifiez la valeur dans FactoryBot

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é.

Écriture du code de test

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

Introduire RSpec et écrire le code de test unitaire
Introduisons le framework Spock et écrivons un test unitaire comme un test
Exécution du code de test RSpec
Procédure de création du code de test unitaire RSpec (création de l'utilisateur de connexion Ver.)
Pour implémenter, écrivez le test puis codez le processus
[Rails] Code de test à l'aide de Rspec
Écrire du code de test avec Spring Boot
[Rails5] Rspec -Test d'unité lors de l'imbrication-
À propos du test d'application RSpec (test unitaire)
Copier et coller le test avec RSpec
[RSpec] Test unitaire (avec gem: factory_bot)
[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
J'ai testé comment utiliser le test / l'unité de Ruby et le code de Janken.
Ordre du prétraitement et du post-traitement du test unitaire JUnit
[Rails] Code de test unitaire pour le modèle utilisateur
Je veux écrire un test unitaire!
Écrire du code difficile à tester
Écrire du code à l'aide de classes et d'instances Ruby
[Rspec] Flux de l'introduction de Rspec à l'écriture du code de test unitaire pour le modèle
Articles et livres utiles pour étudier le code de test
Après l'introduction de RSpec, jusqu'à ce que vous commenciez à écrire le code de test unitaire pour le modèle
Comment écrire du code de test avec la certification de base
[Rails] De la préparation du test au test unitaire du modèle [RSpec]
Comment écrire un test unitaire pour Spring Boot 2
[Rails / RSpec] Ecrire un test de modèle (avec Shoulda Matchers / FactoryBot)
Test unitaire de l'API Web et test d'intégration avec SpringBoot + Junit5, 4 modèles
Comment écrire dynamiquement des cas de test itératifs à l'aide de test / unit (Test :: Unit)
Échantillon de bibliothèque de tests unitaires Java
[Tester l'apprentissage / la sortie du code]
[Rails] Test avec RSpec
Testez Nokogiri avec Rspec.
Faites un test unitaire avec Junit.
J'ai essayé un test unitaire de l'application Rails en utilisant RSpec et FactoryBot