[RUBY] Schienen lernen 2. Tag 2

Ruby on Rails 5 Schnelllernhandbuch Kapitel 5

5-4 In diesem Kapitel beschriebene Testarten (RSpec)

Der Systemtest, der sich im äußersten Rahmen des Tests befindet, ist wichtig RSpec ist wie eine Software, die einen Systemtest durchführt Im Systemtest funktioniert eine Software namens capybara so, als würden Sie eine Webanwendung ausführen, und sie sucht nach Systemfehlern in der Bewegung.

5-7 Bereiten Sie die Erstellung von Testdaten mit FactoryBot vor

Erstens ist es beim Testen mit einer Datenbank nicht möglich, ohne Daten zum Testen zu sprechen. Der Ablauf besteht darin, Testdaten mit FactoryBot zu erstellen und von dort aus zu testen. Hier sehen wir, wie bestimmte Daten in FactoryBot geschrieben werden. Es sind zwei spezifische Schritte erforderlich, um den Test auszuführen

  1. Erstellen Sie eine Vorlage zum Erstellen von Daten mit FactoryBot.
  2. Geben Sie Testdaten mithilfe der FactoryBot-Vorlage in die Testdatenbank ein, z. B. vor SystemSepc.

spec/factories/users.rb


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

Ich habe eine Methode namens factory geschrieben und den Wert von Benutzerinformationen (vorläufig) darin eingefügt. Dies sind die Testdaten. ① factory: 〇〇 do (diesmal Benutzer) Dieser 〇〇 Teil ist der Name dieser Factory und der Name, der beim Aufrufen verwendet wird. Verwenden Sie grundsätzlich den Namen der Klasse, die der erstellten Datentabelle entspricht (die Benutzerklasse entspricht der Benutzertabelle). Auf diese Weise können sowohl der Klassenname als auch der Factory-Methodenname kombiniert werden. Wenn Sie jedoch wirklich etwas mit einem anderen Klassennamen und Methodennamen verwenden möchten

factory :admin_user, class: User do

Sie können auch Fabrik: Fabrikname, Klasse: Klassenname wie oben beschrieben sagen.

Erstellen Sie auch Aufgabendaten zum Testen

spec/factories/tasks.rb


FactoryBot.define do
 factory :task do 
  name {'Schreiben Sie einen Test'}
  description {'RSpec & Capybara &Bereiten Sie den FactoryBot vor'}
  user  #①
 end
end

① Der oben genannte Benutzer dient zum Zuordnen einer Aufgabe zum Benutzer (schreiben Sie hier, zu welchem Benutzer diese erstellte Aufgabe gehört).

5-8 SystemSpec der Aufgabenlistenanzeigefunktion

In obigem

  1. Erstellen Sie eine Vorlage zum Erstellen von Daten mit FactoryBot.
  2. Geben Sie Testdaten mithilfe der FactoryBot-Vorlage in die Testdatenbank ein, z. B. vor SystemSepc. Ich ging zu Nr. 1. Als nächstes wird der zweite Test mit SystemSpec durchgeführt. Diesmal

Wenn Sie zum Listenbildschirm wechseln, werden die erstellten Aufgaben angezeigt.

Schreiben Sie einen Testcode und prüfen Sie, ob dieser Vorgang ordnungsgemäß funktioniert. Zuerst müssen Sie Testcode schreiben, damit es funktioniert. Der Testcode lautet

① Benutzer A erstellen (Vorbereitung) (2) Erstellen Sie eine Aufgabe, deren Ersteller Benutzer A ist (Vorbereitung) ③ Melden Sie sich vom Browser aus als Benutzer A an (Vorbereitung) ④ Bestätigen Sie (ausführen), dass der Name der von Benutzer A erstellten Aufgabe auf dem Bildschirm angezeigt wird.

Schreiben Sie diese vier Schritte mit Testcode

① Benutzer A erstellen (Vorbereitung)

spec/system/tasks_spec.rb


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

Ich habe eine Fabrik mit dem Namen user herausgezogen und diese Informationen als user_a verwendet. Durch Schreiben des Namens und der E-Mail auf der Rückseite wird der Inhalt geändert und Informationen nur für Benutzer A erstellt (Beachten Sie, dass der unveränderte Teil wie das Kennwort der Wert ist, der bei der Erstellung der Factory-Methode festgelegt wurde).

② Erstellen Sie eine Aufgabe, deren Ersteller Benutzer A ist (Vorbereitung)

spec/system/tasks_spec.rb


FactoryBot.create(:task, name: 'Erste Aufgabe', user:user_a)

Benutzer schreiben: user_a bedeutet, dass diese Aufgabe von user_a geschrieben wurde.

③ Melden Sie sich vom Browser aus als Benutzer A an (Vorbereitung) Einloggen

A. Gehen Sie zum Anmeldebildschirm B. Geben Sie Ihre E-Mail-Adresse ein C. Geben Sie Ihr Passwort ein D. Drücken Sie die "Login" -Taste

Die Operation ist notwendig.

A. Sie können zum Anmeldebildschirm wechseln, indem Sie visit login_path (visit URL) schreiben.

spec/system/tasks_spec.rb


visit login_path

B. Geben Sie Ihre E-Mail-Adresse ein. C. Geben Sie Ihr Passwort mit der Methode fill_in ein

spec/system/tasks_spec.rb


fill_in'Mail Adresse', with: '[email protected]'
fill_in'Passwort', with: 'password'

D. Verwenden Sie die click_button-Methode, um auf die Schaltfläche "Login" zu klicken

spec/system/tasks_spec.rb


click_button'Anmeldung'

Zusammenfassend ③

spec/system/tasks_spec.rb


visit login_path
fill_in'Mail Adresse', with: '[email protected]'
fill_in'Passwort', with: 'password'
click_button'Anmeldung'

Es wird so sein.

④ Bestätigen (ausführen), dass der Name der von Benutzer A erstellten Aufgabe auf dem Bildschirm angezeigt wird.

Verwenden Sie zur Überprüfung den eigenen Schreibstil von RSpec

expect(page).to have_content 'Erste Aufgabe'

erwarten (Seite) .zu → Ich erwarte den Bildschirm have_content'Erste Aufgabe '→ Gibt es Inhalte, die als erste Aufgabe bezeichnet werden? Meint

Kombinieren wir die obigen Operationen in einem Code ①②③ ist ein Code für die Vorbereitung, also vorher ④ ist der Code für die Ausführung, füllen Sie ihn also aus

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Aufgabenverwaltungsfunktion',type:system do #Typ für die allgemeinste Beschreibung:System anbringen
 describe 'Listenanzeigefunktion' do
   before do
    user_a = FactoryBot.create(:user, name: 'Nutzername', email:'[email protected]')
    FactoryBot.create(:task, name: 'Erste Aufgabe', user:user_a)
   end

   context'Wenn Benutzer A angemeldet ist' do
     before do
       visit login_path
       fill_in'Mail Adresse', with: '[email protected]'
       fill_in'Passwort', with: 'password'
       click_button'Anmeldung'
     end

     it'Die von Benutzer A erstellte Aufgabe wird angezeigt.' do
       expect(page).to have_content 'Erste Aufgabe'
     end
   end
 end
end

Übersicht über PSpec

Untitled-1 copy.jpg

5-10 Standardisierung mit vorher

Erstellen Sie ein Muster, in dem Benutzer B sowie Benutzer A angemeldet sind

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Aufgabenverwaltungsfunktion',type:system do #Typ für die allgemeinste Beschreibung:System anbringen
 describe 'Listenanzeigefunktion' do
   before do
    user_a = FactoryBot.create(:user, name: 'Nutzername', email:'[email protected]')
    FactoryBot.create(:task, name: 'Erste Aufgabe', user:user_a)
   end

   context'Wenn Benutzer A angemeldet ist' do
     before do
       visit login_path
       fill_in'Mail Adresse', with: '[email protected]'
       fill_in'Passwort', with: 'password'
       click_button'Anmeldung'
     end

      it'Die von Benutzer A erstellte Aufgabe wird angezeigt.' do
        expect(page).to have_no_content 'Erste Aufgabe'
      end
   end
 
   context'Wenn Benutzer B angemeldet ist' do
     before do
       visit login_path
       fill_in'Mail Adresse', with: '[email protected]'
       fill_in'Passwort', with: 'password'
       click_button'Anmeldung'
     end

     it'Von Benutzer A erstellte Aufgaben werden nicht angezeigt' do
       expect(page).to have_no_content 'Erste Aufgabe'
     end
   end
 end
end

visit login_path fill_in'email address ', with:'[email protected]' fill_in'password ', mit:' password ' click_button'Login ' Es gibt zwei, was das Verständnis erschwert. Also werde ich das zusammenstellen.

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Aufgabenverwaltungsfunktion',type:system do #Typ für die allgemeinste Beschreibung:System anbringen
 describe 'Listenanzeigefunktion' do
   before do
    user_a = FactoryBot.create(:user, name: 'Nutzername', email:'[email protected]')
    FactoryBot.create(:task, name: 'Erste Aufgabe', user:user_a)

    visit login_path
    fill_in'Mail Adresse', with: '[email protected]'
    fill_in'Passwort', with: 'password'
    click_button'Anmeldung'
   end

   context'Wenn Benutzer A angemeldet ist' do
     it'Die von Benutzer A erstellte Aufgabe wird angezeigt.' do
       expect(page).to have_content 'Erste Aufgabe'
     end
   end

   context'Wenn Benutzer B angemeldet ist' do
     before do
       FactoryBot.create(:user, name: 'Nutzername', email:'[email protected]')
     end

     it'Von Benutzer A erstellte Aufgaben werden nicht angezeigt' do
       expect(page).to have_no_content 'Erste Aufgabe'
     end
    
   end
 end
end

Wenn Benutzer A angemeldet ist, führen Sie den oberen aus, und wenn Benutzer B angemeldet ist, führen Sie den unteren aus.

5-11 Commonization mit let

Mit FactoryBot erstellte Daten können mit let wie eine Variable behandelt werden.

spec/system/tasks_spec.rb


require 'rails_helper'

describe 'Aufgabenverwaltungsfunktion',type:system do #Typ für die allgemeinste Beschreibung:System anbringen
 describe 'Listenanzeigefunktion' do
   let(:user_a){FactoryBot,create(:user, name:'Benutzer A.', email: '[email protected]')} #Benutzer A.を作ったパターン
   let(:user_b){FactoryBot,create(:user, name:'Benutzer B.', email: '[email protected]')} #Benutzer B.を作ったパターン


   before do
    FactoryBot.create(:task, name: 'Erste Aufgabe', user:user_a)
    visit login_path
    fill_in'Mail Adresse', with: login_user.email #Ich weiß nicht, ob ich mich in A oder B anmelde, damit ich in beide Richtungen gehen kann
    fill_in'Passwort', with: login_user.password #Ich weiß nicht, ob ich mich in A oder B anmelde, damit ich in beide Richtungen gehen kann
    click_button'Anmeldung'
   end

   context'Wenn Benutzer A angemeldet ist' do
     let(:login_user){user_a} #Benutzer extrahieren Eine oben definierte Information
     it'Die von Benutzer A erstellte Aufgabe wird angezeigt.' do
       expect(page).to have_content 'Erste Aufgabe'
     end
   end

   context'Wenn Benutzer B angemeldet ist' do
     let(:login_user){user_b} #Extrahieren Sie die oben definierten Benutzer-B-Informationen

     it'Von Benutzer A erstellte Aufgaben werden nicht angezeigt' do
       expect(page).to have_no_content 'Erste Aufgabe'
     end
   end
 end
end

5-13 Verwenden Sie shared_example

Wie man die Ergebnisse desselben bei der Ausführung mit verschiedenen Beschreibungen kombiniert

#teilte es Operation_example_schreibe für
shared_example_for 'Die von Benutzer A erstellte Aufgabe wird angezeigt.' do
   it {expect(page).to have_content 'Erste Aufgabe'}
end

#it_behaves_Sie müssen es nicht einmal schreiben, indem Sie einfach wie schreiben
it_behaves_like 'Die von Benutzer A erstellte Aufgabe wird angezeigt.'

Recommended Posts

Schienen lernen 2. Tag 2
Schienen lernen Tag 1 Teil 3
Schienen lernen Tag 3 Teil 2
Schienen lernen Tag 1 Teil 2
Rails Lerntag 4
Schienen lernen Tag 2
Schienen Lerntag 1
Programmiertag 3
Rails Docker-Teil 1-
Rails Docker ~ Teil 2 ~
Java-Lerntag 2
Java-Lerntag 1
Rails Tutorial Kapitel 3 Lernen
[Rails] Lernen mit Rails Tutorial
Rails Tutorial Kapitel 4 Lernen
Rails Tutorial Kapitel 1 Lernen
Rails Tutorial Kapitel 2 Lernen
Ruby on Rails Lernrekord -2020.10.04
Ruby on Rails Lernrekord -2020.10.05
Java-Lerntag 4
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails lernen Rekord-2020.10.07 ①
Ruby on Rails Lernrekord -2020.10.06
Rails 5 Code Reading Teil 2 ~ Aktionsansicht ~
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 10
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 7
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 4
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 9
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 6
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 5
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 2
Rails Tutorial Kapitel 0: Vorbereitende Grundkenntnisse 5
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 3
Muskel Rubin auf Schienen Tag 1 ~ Umweltbau ~
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 8