[RUBY] Rails apprentissage 2ème jour 2

Ruby on Rails 5 Guide pratique d'apprentissage rapide chapitre 5

5-4 Types de tests décrits dans ce chapitre (RSpec)

Le test du système, qui est situé dans le cadre le plus extérieur du test, est important RSpec est comme un logiciel qui effectue un test système Dans systemtest, un logiciel appelé capybara fonctionne comme si vous exécutiez une application Web, et il recherche les erreurs système dans le mouvement.

5-7 Préparez-vous à créer des données de test avec FactoryBot

Tout d'abord, lors d'un test à l'aide d'une base de données, il n'est pas possible de parler sans données pour le test. Le flux consiste à créer des données de test avec FactoryBot, puis à tester à partir de là. Ici, voyons comment écrire des données spécifiques dans FactoryBot. Deux étapes spécifiques sont nécessaires pour exécuter le test

  1. Créez un modèle pour créer des données avec FactoryBot.
  2. Entrez les données de test dans la base de données de test à l'aide du modèle FactoryBot, comme avant SystemSepc.

spec/factories/users.rb


FactoryBot.define do
 factory :user do #①
  name {'Utilisateur test'}
  email {'[email protected]'}
  password {'password'}
 end
end

J'ai écrit une méthode appelée factory et y ai mis la valeur des informations utilisateur (provisoires). Ce seront les données de test. ① usine: 〇〇 do (utilisateur cette fois) Cette 〇〇 partie est le nom de cette usine et le nom utilisé lors de l'appel. En gros, utilisez le nom de la classe qui correspond à la table de données créée (la classe utilisateur correspond à la table utilisateur). Ce faisant, le nom de la classe et le nom de la méthode d'usine peuvent être combinés. Cependant, si vous voulez vraiment utiliser quelque chose avec un nom de classe et un nom de méthode différents

factory :admin_user, class: User do

Vous pouvez également dire usine: nom de l'usine, classe: nom de la classe, procédez comme ci-dessus.

Créez également des données de tâches pour les tests

spec/factories/tasks.rb


FactoryBot.define do
 factory :task do 
  name {'Rédiger un test'}
  description {'RSpec & Capybara &Préparer FactoryBot'}
  user  #①
 end
end

① L'utilisateur ci-dessus sert à associer la tâche à l'utilisateur (écrivez ici à quel utilisateur appartient cette tâche créée)

5-8 SystemSpec de la fonction d'affichage de la liste des tâches

Au dessus

  1. Créez un modèle pour créer des données avec FactoryBot.
  2. Entrez les données de test dans la base de données de test à l'aide du modèle FactoryBot, comme avant SystemSepc. Je suis allé au n ° 1. Ensuite, le deuxième test est effectué à l'aide de SystemSpec. Cette fois

Lorsque vous passez à l'écran de liste, les tâches créées s'affichent.

Écrivez un code de test et vérifiez si l'opération comme celle-ci fonctionne correctement. Vous devez d'abord écrire du code de test pour le faire fonctionner. Le code de test est

① Créer l'utilisateur A (préparation) (2) Créer une tâche dont le créateur est l'utilisateur A (préparation) ③ Connectez-vous depuis le navigateur en tant qu'utilisateur A (préparation) ④ Confirmez (exécutez) que le nom de la tâche créée par l'utilisateur A s'affiche à l'écran.

Écrivez ces quatre étapes avec le code de test

① Créer l'utilisateur A (préparation)

spec/system/tasks_spec.rb


user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')

J'ai sorti une usine nommée user et utilisé cette information comme user_a. En écrivant le nom et l'e-mail attachés au verso, le contenu est modifié et des informations uniquement pour l'utilisateur A sont créées (notez que la partie inchangée telle que le mot de passe est la valeur définie lors de la création de la méthode d'usine)

② Créer une tâche dont le créateur est l'utilisateur A (préparation)

spec/system/tasks_spec.rb


FactoryBot.create(:task, name: 'Première tâche', user:user_a)

L'écriture de user: user_a signifie que cette tâche a été écrite par user_a.

③ Connectez-vous depuis le navigateur en tant qu'utilisateur A (préparation) Ouvrir une session

A. Allez à l'écran de connexion B. Entrez votre adresse e-mail C. Entrez votre mot de passe D. Appuyez sur le bouton "Connexion"

L'opération est nécessaire.

A. Vous pouvez accéder à l'écran de connexion en écrivant visit login_path (visit URL)

spec/system/tasks_spec.rb


visit login_path

B. Entrez votre adresse e-mail, C. Utilisez la méthode fill_in pour entrer votre mot de passe

spec/system/tasks_spec.rb


fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'

D. Utilisez la méthode click_button pour appuyer sur le bouton "Connexion"

spec/system/tasks_spec.rb


click_button's'identifier'

Pour résumer ③

spec/system/tasks_spec.rb


visit login_path
fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'
click_button's'identifier'

Ce sera comme ça.

④ Confirmez (exécutez) que le nom de la tâche créée par l'utilisateur A s'affiche à l'écran.

Pour vérifier, utilisez le style d'écriture de RSpec

expect(page).to have_content 'Première tâche'

attendre (page) .to → J'attends l'écran have_content'First task '→ S'il existe un contenu appelé première tâche Veux dire

Combinons les opérations ci-dessus en un seul code ①②③ est un code de préparation, donc avant ④ est le code pour l'exécution, alors remplissez-le en l'utilisant

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
 describe 'Fonction d'affichage de liste' do
   before do
    user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
    FactoryBot.create(:task, name: 'Première tâche', user:user_a)
   end

   context'Lorsque l'utilisateur A est connecté' do
     before do
       visit login_path
       fill_in'adresse mail', with: '[email protected]'
       fill_in'mot de passe', with: 'password'
       click_button's'identifier'
     end

     it'La tâche créée par l'utilisateur A s'affiche.' do
       expect(page).to have_content 'Première tâche'
     end
   end
 end
end

Présentation de PSpec

Untitled-1 copy.jpg

5-10 normalisation en utilisant avant

Créez un modèle dans lequel l'utilisateur B ainsi que l'utilisateur A sont connectés

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
 describe 'Fonction d'affichage de liste' do
   before do
    user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
    FactoryBot.create(:task, name: 'Première tâche', user:user_a)
   end

   context'Lorsque l'utilisateur A est connecté' do
     before do
       visit login_path
       fill_in'adresse mail', with: '[email protected]'
       fill_in'mot de passe', with: 'password'
       click_button's'identifier'
     end

      it'La tâche créée par l'utilisateur A s'affiche.' do
        expect(page).to have_no_content 'Première tâche'
      end
   end
 
   context'Lorsque l'utilisateur B est connecté' do
     before do
       visit login_path
       fill_in'adresse mail', with: '[email protected]'
       fill_in'mot de passe', with: 'password'
       click_button's'identifier'
     end

     it'Les tâches créées par l'utilisateur A ne sont pas affichées' do
       expect(page).to have_no_content 'Première tâche'
     end
   end
 end
end

visit login_path fill_in'adresse e-mail ', avec:'[email protected]' fill_in'password ', avec:' password ' click_button'Connexion ' Il y en a deux, ce qui le rend difficile à comprendre. Je vais donc mettre cela ensemble.

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
 describe 'Fonction d'affichage de liste' do
   before do
    user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
    FactoryBot.create(:task, name: 'Première tâche', user:user_a)

    visit login_path
    fill_in'adresse mail', with: '[email protected]'
    fill_in'mot de passe', with: 'password'
    click_button's'identifier'
   end

   context'Lorsque l'utilisateur A est connecté' do
     it'La tâche créée par l'utilisateur A s'affiche.' do
       expect(page).to have_content 'Première tâche'
     end
   end

   context'Lorsque l'utilisateur B est connecté' do
     before do
       FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
     end

     it'Les tâches créées par l'utilisateur A ne sont pas affichées' do
       expect(page).to have_no_content 'Première tâche'
     end
    
   end
 end
end

Lorsque l'utilisateur A est connecté, exécutez la partie supérieure, et lorsque l'utilisateur B est connecté, exécutez la partie inférieure.

5-11 Commonisation avec let

Les données créées avec FactoryBot peuvent être traitées comme une variable en utilisant let.

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
 describe 'Fonction d'affichage de liste' do
   let(:user_a){FactoryBot,create(:user, name:'Utilisateur A', email: '[email protected]')} #Utilisateur Aを作ったパターン
   let(:user_b){FactoryBot,create(:user, name:'Utilisateur B', email: '[email protected]')} #Utilisateur Bを作ったパターン


   before do
    FactoryBot.create(:task, name: 'Première tâche', user:user_a)
    visit login_path
    fill_in'adresse mail', with: login_user.email #Je ne sais pas si je me connecte à A ou B pour pouvoir aller dans les deux sens
    fill_in'mot de passe', with: login_user.password #Je ne sais pas si je me connecte à A ou B pour pouvoir aller dans les deux sens
    click_button's'identifier'
   end

   context'Lorsque l'utilisateur A est connecté' do
     let(:login_user){user_a} #Extraire les informations utilisateur A définies ci-dessus
     it'La tâche créée par l'utilisateur A s'affiche.' do
       expect(page).to have_content 'Première tâche'
     end
   end

   context'Lorsque l'utilisateur B est connecté' do
     let(:login_user){user_b} #Extraire les informations utilisateur B définies ci-dessus

     it'Les tâches créées par l'utilisateur A ne sont pas affichées' do
       expect(page).to have_no_content 'Première tâche'
     end
   end
 end
end

5-13 Utiliser shared_example

Comment combiner les résultats de la même chose lors de l'exécution avec divers décrivent

#it opération partagée_example_écrire pour
shared_example_for 'La tâche créée par l'utilisateur A s'affiche.' do
   it {expect(page).to have_content 'Première tâche'}
end

#it_behaves_Vous n'êtes pas obligé de l'écrire une seule fois en écrivant simplement comme
it_behaves_like 'La tâche créée par l'utilisateur A s'affiche.'

Recommended Posts

Rails apprentissage 2ème jour 2
Rails Learning Jour 1 Partie 3
Rails Learning Jour 3 Partie 2
Rails Learning Jour 1 Partie 2
Rails Learning jour 4
Rails Learning jour 2
rails d'apprentissage jour 1
Programmation apprentissage jour 3
Rails Docker-Partie 1-
Rails Docker ~ Partie 2 ~
java learning day 2
java learning day 1
Tutoriel Rails Chapitre 3 Apprentissage
[Rails] Didacticiel Apprendre avec les rails
Tutoriel Rails Chapitre 4 Apprentissage
Tutoriel Rails Chapitre 1 Apprentissage
Tutoriel Rails Chapitre 2 Apprentissage
Record d'apprentissage Ruby on rails -2020.10.04
Record d'apprentissage de Ruby on rails -2020.10.05
java learning day 4
Record d'apprentissage Ruby on rails-2020.10.07 ②
Record d'apprentissage Ruby on rails-2020.10.07 ①
Record d'apprentissage de Ruby on rails -2020.10.06
Rails 5 Lecture de code Partie 2 ~ Vue Action ~
Tutoriel Rails 6e édition Résumé d'apprentissage Chapitre 10
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 7
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 4
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 9
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 6
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 5
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 2
Tutoriel Rails Chapitre 0: Apprentissage préliminaire des connaissances de base 5
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 3
Muscle Ruby on Rails Jour 1 ~ Construction de l'environnement ~
Rails Tutorial 6e édition Résumé d'apprentissage Chapitre 8