[RUBY] [2.] RSpec-Anfänger haben SystemSpec als Anfänger geschrieben (Numa Edition)

Einführung

Dies ist der vorherige Artikel [1.] RSpec-Anfänger hat ModelSpec als Anfänger geschrieben über ModelSpec geschrieben habe. Wenn Sie mehr über ModelSpec erfahren möchten, lesen Sie bitte den vorherigen Artikel!

Außerdem wurde neulich eine Lernsitzung für Anfänger (RSpec Beginners !!) mit der Freundlichkeit des RSpec-Mannes Junichi Ito @jnchito abgehalten. Ich habe auch an "RSpec Beginners !!") teilgenommen, daher denke ich, dass Sie Ihr Verständnis vertiefen können, indem Sie sich dieses Video ansehen. Schauen Sie also bitte nach, wenn Sie möchten.

Was ist in diesem Artikel zu tun?

In diesem Artikel nicht behandelt

Annahme

Informationen zu Systemspezifikationen

Was ist überhaupt ** Systemspezifikation **? : Denken: Ich denke, einige Leute sagen.

Stellen Sie sich zum Beispiel vor, Sie verwenden eine Website. Wenn Sie ein Konto registrieren, sich anmelden, meine Seite bearbeiten, etwas veröffentlichen, einen DM an jemanden senden usw., hat dies kein Ende, aber ich werde im eigentlichen Browser einige Maßnahmen ergreifen richtig? Die Systemspezifikationen testen, ob diese ** Benutzeraktion im eigentlichen Browser korrekt funktioniert **. Dies ist wichtig, da es auf Dinge abzielt, die Benutzer beim Anzeigen der Website tatsächlich bewegen. Daher habe ich am Ende des vorherigen Artikels erwähnt, dass es wichtig ist, Modellspezifikationen zu schreiben, aber es ist wichtig, Systemspezifikationen zu schreiben.

Wenn Sie nach einem Artikel über RSpec suchen, wird ** "Funktionsspezifikationen" ** angezeigt. Beachten Sie jedoch, dass dies der Vorgänger der Systemspezifikationen ist. Ab RSpec 3.7 können Sie der Testsuite für Rails 5.1 und höhere Anwendungen Systemspezifikationen hinzufügen. Wenn Sie also eine Version über oder höher verwenden, schreiben wir die Systemspezifikationen. ..

Übrigens sind verschiedene Einstellungen erforderlich, um die Systemspezifikationen zu beschreiben. Die erforderlichen Edelsteine und Einstellungen finden Sie in Everyday Rails.

Testen von users_spec.rb

① Verwenden Sie FactoryBot und bereiten Sie Benutzerdaten im Voraus vor

Letztes Mal habe ich FactoryBot verwendet, um die vorläufigen Daten vorzubereiten. Es wird auch beim Schreiben von Systemspezifikationen verwendet, daher wird es unten als Referenz aufgeführt. Weitere Informationen zu FactoryBot finden Sie im vorherigen Artikel.

①spec/factories/users.rb


FactoryBot.define do
  #Verwenden Sie FactoryBot und bereiten Sie Benutzerdaten im Voraus vor
  factory :user do
    last_name { "Prüfung" }
    first_name { "Taro" }
    kana_last_name { "Prüfung" }
    kana_first_name { "Taro" }
    email { "[email protected]" }
    postal_code { "1234567" }
    address { "123, Chiyoda-ku, Tokio-12-1" }
    phone_number { "12345678910" }
    password { "testtaro" }
  end
end

② Spezifische Codebeschreibung

Schreiben wir nun den Testcode. Ausführen von $ rails g rspec: Systembenutzer erstellen users_spec.rb im Ordner spec / system. Der Testcode (tatsächliche Bewegung im Browser usw.) wird in diese Datei geschrieben. Unten finden Sie ein vollständiges Beispiel.

②spec/system/users_spec.rb


require 'rails_helper'

RSpec.describe 'User', type: :system do
  let(:user){FactoryBot.create(:user)}
  describe 'Benutzerauthentifizierungstest' do
    describe 'Neue Benutzerregistrierung' do
      before do
        visit new_user_registration_path #Übergang zum neuen Registrierungsbildschirm
      end
      context 'Übergang zum neuen Registrierungsbildschirm' do
        it 'Erfolgreiche Neuanmeldung' do
          # fill_Geben Sie die Registrierungsinformationen in das Textfeld mit in ein
          fill_in 'Name(Nachname)', with: "Prüfung"
          fill_in 'Name(Name)', with: "Jiro"
          fill_in 'Frigana(Nachname)', with: "Prüfung"
          fill_in 'Frigana(Mei)', with: "Jiro"
          fill_in 'Mail Adresse', with: "[email protected]"
          fill_in 'Postleitzahl(kein Bindestrich)', with: "2222222"
          fill_in 'Adresse', with: "123 Adachi-ku, Tokio-12-1"
          fill_in 'Telefonnummer(kein Bindestrich)', with: "22222222222"
          fill_in 'Passwort', with: "testjiro"
          fill_in 'Bestätigungspasswort', with: "testjiro"
          click_button 'Anmelden' #Drück den Knopf
          expect(page).to have_content 'Die Registrierung des Kontos ist abgeschlossen.'
        end
        
        it 'Neue Registrierung schlägt fehl' do
          fill_in 'Name(Nachname)', with: ""
          fill_in 'Name(Name)', with: ""
          fill_in 'Frigana(Nachname)', with: ""
          fill_in 'Frigana(Mei)', with: ""
          fill_in 'Mail Adresse', with: ""
          fill_in 'Postleitzahl(kein Bindestrich)', with: ""
          fill_in 'Adresse', with: ""
          fill_in 'Telefonnummer(kein Bindestrich)', with: ""
          fill_in 'Passwort', with: ""
          fill_in 'Bestätigungspasswort', with: ""
          click_button 'Anmelden'
          expect(page).to have_content 'Einzelne Mitglieder wurden nicht gespeichert.'
        end
      end
    end
    
    describe 'Benutzer-Anmeldung' do
      before do
        visit new_user_session_path
      end

      context 'Übergang zum Anmeldebildschirm' do
        it 'erfolgreicher Login' do
          fill_in "Mail Adresse", with: user.email
          fill_in 'Passwort', with: user.password
          click_button 'Einloggen'
          expect(page).to have_content 'Sie sind jetzt angemeldet.'
        end

        it 'Anmeldung fehlgeschlagen' do
          fill_in 'Mail Adresse', with: ''
          fill_in 'Passwort', with: ''
          click_button 'Einloggen'
          expect(current_path).to eq new_user_session_path
        end
      end
    end
  end

  describe 'Benutzertests' do
    before do
      visit new_user_session_path
      fill_in 'Mail Adresse', with: user.email
      fill_in 'Passwort', with: user.password
      click_button 'Einloggen'
    end

    describe 'Mein Seitentest' do
      it 'Meine Seite wird in der Kopfzeile angezeigt' do
        expect(page).to have_content('Meine Seite')
      end
      it 'Gehen Sie zu Meine Seite und der Bearbeitungslink wird angezeigt' do
        visit user_path(user)
        expect(page).to have_content('Bearbeiten')
      end
    end

    describe 'Test bearbeiten' do
      context 'Übergang zum Bearbeitungsbildschirm' do
        it 'Kann übergehen' do
          visit edit_user_path(user)
          expect(current_path).to eq edit_user_path(user)
        end
      end

      context 'Überprüfen und bearbeiten Sie die Anzeige' do
        before do
          visit edit_user_path(user)
        end
        it 'Es wird als Bearbeitung der Registrierungsinformationen angezeigt' do
          expect(page).to have_content('Registrierungsinformationen bearbeiten')
        end
        it 'Das Bildbearbeitungsformular wird angezeigt' do
          expect(page).to have_field 'user[profile_image]'
        end
        it 'Mein Vor- und Nachname wird auf dem Namensbearbeitungsformular angezeigt' do
          expect(page).to have_field 'Name(Nachname)', with: user.last_name
        end
        it 'Ihr Name wird auf dem Namensbearbeitungsformular angezeigt' do
          expect(page).to have_field 'Name(Name)', with: user.first_name
        end
        it 'Mein Kana-Nachname wird auf dem Namensbearbeitungsformular angezeigt' do
          expect(page).to have_field 'Frigana(Nachname)', with: user.kana_last_name
        end
        it 'Ihr Kana-Name wird im Namensbearbeitungsformular angezeigt' do
          expect(page).to have_field 'Frigana(Mei)', with: user.kana_first_name
        end
        it 'Ihre E-Mail-Adresse wird im Formular zum Bearbeiten der E-Mail-Adresse angezeigt' do
          expect(page).to have_field 'Mail Adresse', with: user.email
        end
        it 'Ihre Postleitzahl wird auf dem Bearbeitungsformular für die Postleitzahl angezeigt' do
          expect(page).to have_field 'Postleitzahl(kein Bindestrich)', with: user.postal_code
        end
        it 'Ihre Adresse wird im Adressbearbeitungsformular angezeigt' do
          expect(page).to have_field 'Adresse', with: user.address
        end
        it 'Ihre Telefonnummer wird im Formular zum Bearbeiten der Telefonnummer angezeigt' do
          expect(page).to have_field 'Telefonnummer(kein Bindestrich)', with: user.phone_number
        end
        it 'Ihr Selbsteinführungstext wird im Bearbeitungsformular für Selbsteinführungstext angezeigt' do
          expect(page).to have_field 'Vorstellen', with: user.introduction
        end
        it 'Erfolgreiche Bearbeitung' do
          #Der Name wurde in Saburo geändert
          fill_in 'Name(Name)', with: 'Saburo'
          fill_in 'Frigana(Mei)', with: 'Sabrow'
          click_button 'Speichern Sie Ihre Änderungen'
          expect(page).to have_content 'Die Aktualisierung der Mitgliedsinformationen ist abgeschlossen.'
          expect(page).to have_content 'Testen Sie Saburo(Subrow testen)'
          expect(current_path).to eq user_path(user)
        end
        it 'Die Bearbeitung schlägt fehl' do
          # first_Name Name(Name)Geben Sie in das Feld ein
          fill_in 'Name(Name)', with: ''
          click_button 'Speichern Sie Ihre Änderungen'
          expect(page).to have_content 'Das einzelne Mitglied wurde aufgrund des Fehlers nicht gespeichert.'
          expect(page).to have_content 'Name(Name)Bitte eingeben'
          expect(current_path).to eq user_path(user)
        end
      end
    end
  end
  
end

Für diejenigen, die sich gefragt haben: "Oh, die Art und Weise, wie FactoryBot geschrieben wird, unterscheidet sich vom letzten Mal: Denken: ** let (: user) ** ??"

RSpec hat eine Funktion namens ** let **. Sie können dies verwenden, um Instanzvariablen in der Form let (: variable) zu ersetzen und sie als Variablen in späterem Code zu verwenden. Weitere Informationen finden Sie in diesem Artikel. Wann benutzt du RSpec let? (Übersetzung) Im Vergleich zum Einschließen in den Vorher-Block ist die Codemenge geringer und sieht eher wie RSpec aus. Verwenden wir sie also. Wie im Referenzartikel beschrieben, hat let jedoch die Eigenschaft ** "verzögerte Auswertung" **, daher müssen Sie vorsichtig sein. Dies wird im folgenden Codebeispiel erläutert. (Deshalb habe ich mich in den Sumpf verliebt)


Beginnen wir mit dem Benutzerauthentifizierungstest. Siehe den Code unten.

②spec/system/users_spec.rb


let(:user){FactoryBot.create(:user)}
  describe 'Benutzerauthentifizierungstest' do
    describe 'Neue Benutzerregistrierung' do
      before do
        visit new_user_registration_path #Übergang zum neuen Registrierungsbildschirm
      end
      context 'Übergang zum neuen Registrierungsbildschirm' do
        it 'Erfolgreiche Neuanmeldung' do
          # fill_Geben Sie die Registrierungsinformationen in das Textfeld mit in ein
          fill_in 'Name(Nachname)', with: "Prüfung"
          fill_in 'Name(Name)', with: "Jiro"
          fill_in 'Frigana(Nachname)', with: "Prüfung"
          fill_in 'Frigana(Mei)', with: "Jiro"
          fill_in 'Mail Adresse', with: "[email protected]"
          fill_in 'Postleitzahl(kein Bindestrich)', with: "2222222"
          fill_in 'Adresse', with: "123 Adachi-ku, Tokio-12-1"
          fill_in 'Telefonnummer(kein Bindestrich)', with: "22222222222"
          fill_in 'Passwort', with: "testjiro"
          fill_in 'Bestätigungspasswort', with: "testjiro"
          click_button 'Anmelden' #Drück den Knopf
          expect(page).to have_content 'Die Registrierung des Kontos ist abgeschlossen.'
        end

Zunächst gibt es eine Beschreibung des Besuchs new_user_registration_path im Vorher-Block. Dieser ** Besuch ** ist eine Funktion von ** Capybara **, mit der Sie zu einer bestimmten Seite mit visit + path gelangen können. ** Capybara ** ist eine praktische Funktion, mit der Benutzer zwischen verschiedenen Seiten wechseln und zu diesem Zeitpunkt nach Problemen suchen können, als ob sie die Website tatsächlich nutzen würden (Capybara ist eine Vielzahl von Seiten). Stellen Sie sich vor, Sie rennen herum und schauen auf.

Mit Capybara können Sie neben dem Besuch verschiedene nützliche Funktionen verwenden. Ich denke, dass gem'capybara 'standardmäßig angehängt wird, wenn Sie eine Rails-Anwendung erstellen, aber bitte überprüfen Sie es. Referenzartikel: [Einführung in RSpec, die verwendet werden kann, Teil 4 "Jede Browseroperation ist kostenlos! Reverse Capybara Encyclopedia"](https://qiita.com/jnchito/items/607f956263c38a5fec24 "Einführung in RSpec, die verwendet werden kann, Teil 4" Beliebige Browseroperation Freiheit! Reverse Capybara Encyclopedia "")


Von hier aus schreibe ich den Testcode, der bei der neuen Registrierung erfolgreich ist, während ich mir den tatsächlichen Bildschirm vorstelle.
Ja, ich habe einen Test mit Systemspezifikationen geschrieben, bei dem eine neue Registrierung erfolgreich ist! Lassen Sie uns $ bundle exec rspec spec / system / users_spec.rb im Terminal ausführen! Wenn dies gut gemacht wird, wird das Ergebnis * 1 Beispiele, 0 Fehler * an das Terminal ausgegeben. Wenn Sie eine Fehlermeldung erhalten, lesen Sie die Fehleranweisung und prüfen Sie, ob der Code fehlerhaft ist oder ob zum Zeitpunkt der Einstellung Auslassungen vorliegen. Sobald Sie sich daran gewöhnt haben, ist die Registrierung des Kontos "Expect (Seite) .not_to have_content" abgeschlossen. Es ist auch wichtig, dass Sie versuchen, nach "Expect" (Seite) in "not_to" zu wechseln, wie "", und erneut bestätigen "** Test schlägt ordnungsgemäß" **. Wenn Sie den falschen Testcode geschrieben haben, ist der Test möglicherweise erfolgreich, obwohl Sie ihn absichtlich auf not_to gesetzt haben. Um dies zu verhindern, ändern Sie es in not_to usw. und stellen Sie sicher, dass der Test fehlschlägt.

Die Grundlagen für das Anmelden und Bearbeiten von Registrierungsinformationen auf "Meine Seite" sind dieselben. Bitte lesen Sie dies beim Schreiben!

Übrigens wird click_button für die Senden-Schaltfläche und das Schaltflächen-Tag verwendet. Verwenden Sie click_link, wenn es nach CSS gleich aussieht, es sich jedoch um einen Link handelt. Click_on kann mit beiden verwendet werden. Dann ist click_on in Ordnung, oder? Ich dachte du da. Ich dachte auch: Umarmen: Um die Schaltfläche zum Senden von Daten und den Link zum Übergang explizit zu trennen? Ich fragte mich, ob es so war, aber gibt es einen anderen Vorteil, wenn man es teilt? Ich möchte, dass Sie mir die Details mitteilen.

Testen von Companies_spec.rb

① Verwenden Sie FactoryBot und bereiten Sie Unternehmensdaten im Voraus vor

Es wurde letztes Mal erstellt.

①spec/factories/companies.rb


FactoryBot.define do
  factory :company do
    company_name { "Test Co., Ltd." }
    kana_company_name { "Test Co., Ltd." }
    email { "[email protected]" }
    postal_code { "1234567" }
    address { "123, Chiyoda-ku, Tokio-12-1" }
    phone_number { "12345678910" }
    password { "testcompany" }
    approved { true }
    is_active { true }
  end
end

② Spezifische Codebeschreibung

Im Gegensatz zur neuen Registrierung einzelner Mitglieder hat die neue Registrierung eines Unternehmens den folgenden Ablauf.

  1. Das Unternehmen füllt das Formular für eine neue Registrierung aus und klickt auf die Schaltfläche Übernehmen.
  2. Sie werden zum oberen Bildschirm weitergeleitet und die Meldung "Bitte warten Sie eine Weile, bis die genehmigte E-Mail eintrifft" wird angezeigt. Gleichzeitig wird eine Anwendungsbenachrichtigung an den Administrator gesendet.
  3. Die Unternehmensanmeldung ist eingeschränkt, bis die genehmigte E-Mail eintrifft.
  4. Der Administrator bestätigt die Anwendungsbenachrichtigung und aktualisiert den Anwendungsstatus auf genehmigt. Gleichzeitig wird eine genehmigte E-Mail an die registrierte Adresse des Unternehmens gesendet.
  5. Sie können sich anmelden.

#### Speck Kopfsalat Ei Tsukune Reis Burger!
Ich war verärgert Mr. Uedas Tsukkomi über Dinge, die zu kompliziert sind, ist herausgekommen.

Die Grundlagen sind die gleichen wie zuvor, daher wäre es kein Problem, wenn ich mich daran gewöhnen würde, aber es war schwierig für Anfänger und ich hatte es schwer. Außerdem konnte ich keinen Referenzartikel für einen solchen Mechanismus finden, weshalb ich diesen Artikel geschrieben habe. (Vielleicht ist es nur ein schlechter Weg, es zu finden) Wenn Sie ein Anfänger sind, der einen ähnlichen Mechanismus entwickelt hat, hoffe ich, dass dies hilfreich ist.

Unten finden Sie ein Beispiel für den vollständigen Code.

②spec/system/companies_spec.rb


require 'rails_helper'

RSpec.describe "Companies", type: :system do
  let!(:admin){FactoryBot.create(:admin)}
  let(:company){FactoryBot.create(:company)}
  describe 'Benutzerauthentifizierungstest' do
    describe 'Neuer Registrierungsantrag für Unternehmen' do
      before do
        visit new_company_registration_path
      end
      it 'Erfolgreicher Registrierungsantrag' do
        fill_in 'Name der Firma', with: "Test 2 Co., Ltd."
        fill_in 'Frigana', with: "Test Two Co., Ltd."
        fill_in 'Mail Adresse', with: "[email protected]"
        fill_in 'Postleitzahl(kein Bindestrich)', with: "2222222"
        fill_in 'Adresse', with: "222, Chiyoda-ku, Tokio-22-2"
        fill_in 'Telefonnummer(kein Bindestrich)', with: "22222222222"
        fill_in 'Passwort', with: "test2company"
        fill_in 'Bestätigungspasswort', with: "test2company"
        click_button 'Anwenden'
        expect(page).to have_content 'Vielen Dank für Ihren Registrierungsantrag. Die Seite nur für Unternehmensmitglieder ist verfügbar, nachdem der Antrag von der Operation genehmigt wurde. Bitte warten Sie eine Weile, bis Sie die genehmigte E-Mail erhalten.'
      end
      it 'Registrierungsantrag schlägt fehl' do
        fill_in 'Name der Firma', with: ""
        fill_in 'Frigana', with: ""
        fill_in 'Mail Adresse', with: ""
        fill_in 'Postleitzahl(kein Bindestrich)', with: ""
        fill_in 'Adresse', with: ""
        fill_in 'Telefonnummer(kein Bindestrich)', with: ""
        fill_in 'Passwort', with: ""
        fill_in 'Bestätigungspasswort', with: ""
        click_button 'Anwenden'
        expect(page).to have_content "Firmenmitglieder wurden nicht gerettet."
      end
    end
  end

  describe 'Testen Sie, bis sich das Unternehmen anmelden kann' do
    before do
      #Corporation füllt das Registrierungsantragsformular aus
      visit new_company_registration_path
      fill_in 'Name der Firma', with: "Test 2 Co., Ltd."
      fill_in 'Frigana', with: "Test Two Co., Ltd."
      fill_in 'Mail Adresse', with: "[email protected]"
      fill_in 'Postleitzahl(kein Bindestrich)', with: "2222222"
      fill_in 'Adresse', with: "222, Chiyoda-ku, Tokio-22-2"
      fill_in 'Telefonnummer(kein Bindestrich)', with: "22222222222"
      fill_in 'Passwort', with: "test2company"
      fill_in 'Bestätigungspasswort', with: "test2company"
      click_button 'Anwenden' #Benachrichtigung wird gesendet
    end
    
    describe 'Administrator: Bestätigung der Benachrichtigung - Test der Antragsgenehmigung' do
      before do
        #Melden Sie sich als Administrator an
        visit new_admin_session_path
        fill_in 'Mail Adresse', with: admin.email
        fill_in 'Passwort', with: admin.password
        click_button 'Einloggen'
      end
      it 'Der Antrag auf Unternehmensregistrierung wird in der Kopfzeile angezeigt' do
        expect(page).to have_content('Antrag auf Unternehmensregistrierung')
      end
      it 'Der Name des Unternehmens, für das Sie sich beworben haben, wird in der Liste der Unternehmensregistrierungsanträge angezeigt.' do
        visit admin_notifications_path
        expect(page).to have_content("Test 2 Es gibt einen Unternehmensregistrierungsantrag von Co., Ltd.")
      end
      it 'Sie können über den Link zur Seite mit den Unternehmensdetails wechseln' do
        visit admin_notifications_path
        notification = Notification.find_by({receiver_id: admin.id, receiver_class: "admin", sender_id: Company.last.id, sender_class: "company"})
        within '.request-message' do
          click_link 'Antrag auf Unternehmensregistrierung' # ページに同一の文言のリンクがある場合(今回の場合「Antrag auf Unternehmensregistrierung」)、classを指定してあげてwithin囲む
        end
        expect(current_path).to eq admin_company_path(notification.sender_id)
      end
      it 'Übergang zum Bearbeitungsbildschirm' do
        visit admin_company_path(Company.last.id)
        click_link 'Bearbeiten'
        expect(current_path).to eq edit_admin_company_path(Company.last.id)
      end
      it 'Antragsstatus genehmigen lassen' do
        visit edit_admin_company_path(Company.last.id)
        choose "company_approved_true" #Überprüfen Sie den Antragsstatus als genehmigt (Unternehmen)._approved_true ist die ID des Optionsfeldelements)
        click_button 'Speichern Sie Ihre Änderungen'
        expect(page).to have_content 'Die Aktualisierung der Unternehmensinformationen ist abgeschlossen.'
        expect(current_path).to eq admin_company_path(Company.last.id)
      end
    end

    describe 'Unternehmen: Login-Test' do
      context 'Unternehmensanmeldung vor Genehmigung' do
        it 'Die Anmeldung schlägt fehl und Sie werden aufgefordert, sich nach Erhalt der E-Mail erneut anzumelden' do
          visit new_company_session_path
          fill_in 'Mail Adresse', with: "[email protected]"
          fill_in 'Passwort', with: "test2company"
          click_button 'Einloggen'
          expect(page).to have_content 'Der Registrierungsantrag wurde nicht genehmigt. Es tut uns leid, aber bitte warten Sie eine Weile, bis Sie die genehmigte E-Mail erhalten.'
        end
      end

      context 'Unternehmensanmeldung nach Genehmigung' do
        before do
          login_as(admin) #Admin Login
          visit edit_admin_company_path(Company.last.id)
          choose "company_approved_true" #Überprüfen Sie den Antragsstatus als genehmigt (Unternehmen)._approved_true ist die ID des Optionsfeldelements)
          click_button 'Speichern Sie Ihre Änderungen'
          click_on 'Ausloggen'
          visit new_company_session_path
        end
        it 'erfolgreicher Login' do
          fill_in 'Mail Adresse', with: "[email protected]"
          fill_in 'Passwort', with: "test2company"
          click_button 'Einloggen'
          expect(page).to have_content 'Sie sind jetzt angemeldet.'
        end
        it 'Anmeldung fehlgeschlagen' do
          fill_in 'Mail Adresse', with: ""
          fill_in 'Passwort', with: ""
          click_button 'Einloggen'
          expect(current_path).to eq new_company_session_path
        end
      end
    end
  end
    
  describe 'Corporate Member Test' do
    before do
      visit new_company_session_path
      fill_in 'Mail Adresse', with: company.email
      fill_in 'Passwort', with: company.password
      click_button 'Einloggen'
    end

    describe 'Mein Seitentest' do
      it 'Meine Seite wird in der Kopfzeile angezeigt' do
        expect(page).to have_content('Meine Seite')
      end
      it 'Gehen Sie zu Meine Seite und der Bearbeitungslink wird angezeigt' do
        visit corporate_company_path(company)
        expect(page).to have_content('Bearbeiten')
      end
    end

    describe 'Test bearbeiten' do
      before do
        visit edit_corporate_company_path(company)
      end
      context 'Bestätigen Sie den Übergang zum Bearbeitungsbildschirm' do
        it 'Kann übergehen' do
          expect(current_path).to eq edit_corporate_company_path(company)
        end
      end
      context 'Bestätigung der Anzeige und Bearbeitung' do
        it 'Es wird als Bearbeitung der Registrierungsinformationen angezeigt' do
          expect(page).to have_content('Registrierungsinformationen bearbeiten')
        end
        it 'Das Formular zur Bearbeitung des Profilbilds wird angezeigt' do
          expect(page).to have_field 'company[profile_image]'
        end
        it 'Das Bearbeitungsformular für das Header-Bild wird angezeigt' do
          expect(page).to have_field 'company[background_image]'
        end
        it 'Der Firmenname wird im Bearbeitungsformular für Firmennamen angezeigt' do
          expect(page).to have_field 'Name der Firma', with: company.company_name
        end
        it 'Ihr Firmen-Kana-Name wird im Frigana-Bearbeitungsformular angezeigt' do
          expect(page).to have_field 'Frigana', with: company.kana_company_name
        end
        it 'Ihre E-Mail-Adresse wird im Formular zum Bearbeiten der E-Mail-Adresse angezeigt' do
          expect(page).to have_field 'Mail Adresse', with: company.email
        end
        it 'Ihre Postleitzahl wird auf dem Bearbeitungsformular für die Postleitzahl angezeigt' do
          expect(page).to have_field 'Postleitzahl(kein Bindestrich)', with: company.postal_code
        end
        it 'Ihre Adresse wird im Adressbearbeitungsformular angezeigt' do
          expect(page).to have_field 'Adresse', with: company.address
        end
        it 'Ihre Telefonnummer wird im Formular zum Bearbeiten der Telefonnummer angezeigt' do
          expect(page).to have_field 'Telefonnummer(kein Bindestrich)', with: company.phone_number
        end
        it 'Ihr Selbsteinführungstext wird im Bearbeitungsformular für Selbsteinführungstext angezeigt' do
          expect(page).to have_field 'Vorstellen', with: company.introduction
        end
        it 'Erfolgreiche Bearbeitung' do
          fill_in 'Vorstellen', with: "Willkommen auf meiner Seite von Test Co., Ltd.!"
          click_button 'Speichern Sie Ihre Änderungen'
          expect(page).to have_content 'Die Aktualisierung der Unternehmensinformationen ist abgeschlossen.'
          expect(current_path).to eq corporate_company_path(company)
        end
        it 'Die Bearbeitung schlägt fehl' do
          fill_in 'Name der Firma', with: ""
          click_button 'Speichern Sie Ihre Änderungen'
          expect(page).to have_content 'Das Unternehmensmitglied wurde aufgrund des Fehlers nicht gespeichert.'
        end
      end
    end
  end
end

Zunächst muss der Administrator die Anwendung genehmigen, bevor sich das Unternehmen anmelden kann. Erstellen Sie daher zuerst einen Administrator mit FactoryBot. Führen Sie $ bin / rails g factory_bot: model admin aus und füllen Sie es mit den benötigten Beispieldaten. Unten finden Sie eine Datei mit Beispieldaten.

spec/factories/admins.rb


FactoryBot.define do
  factory :admin do
    email { "[email protected]" }
    password { "testadmin"}
  end
end

Der neue Registrierungsantrag für das Unternehmen und der endgültige Test zur Bearbeitung der Registrierungsinformationen sind fast identisch mit denen in users_spec.rb, sodass Erklärungen weggelassen werden.


In der Zwischenzeit werde ich den ** Test erklären, bis sich das Unternehmen anmelden kann **. Siehe den Code unten.

②spec/system/companies_spec.rb


  describe 'Testen Sie, bis sich das Unternehmen anmelden kann' do
    before do
      # 1.Corporation füllt das Registrierungsantragsformular aus
      visit new_company_registration_path
      fill_in 'Name der Firma', with: "Test 2 Co., Ltd."
      fill_in 'Frigana', with: "Test Two Co., Ltd."
      fill_in 'Mail Adresse', with: "[email protected]"
      fill_in 'Postleitzahl(kein Bindestrich)', with: "2222222"
      fill_in 'Adresse', with: "222, Chiyoda-ku, Tokio-22-2"
      fill_in 'Telefonnummer(kein Bindestrich)', with: "22222222222"
      fill_in 'Passwort', with: "test2company"
      fill_in 'Bestätigungspasswort', with: "test2company"
      click_button 'Anwenden' #Benachrichtigung wird gesendet
    end
    
    describe 'Administrator: Bestätigung der Benachrichtigung - Test der Antragsgenehmigung' do
      before do
        # 2.Melden Sie sich als Administrator an
        visit new_admin_session_path
        fill_in 'Mail Adresse', with: admin.email
        fill_in 'Passwort', with: admin.password
        click_button 'Einloggen'
      end
      # 3.Bestätigen Sie, dass sich der Administrator angemeldet hat, da der Antrag auf Unternehmensregistrierung formuliert ist
      it 'Der Antrag auf Unternehmensregistrierung wird in der Kopfzeile angezeigt' do
        expect(page).to have_content('Antrag auf Unternehmensregistrierung')
      end
      # 4.Klicken Sie auf den Link zur Unternehmensregistrierungsanwendung und bestätigen Sie den Firmennamen der Anwendung
      it 'Der Name des Unternehmens, für das Sie sich beworben haben, wird in der Liste der Unternehmensregistrierungsanträge angezeigt.' do
        visit admin_notifications_path
        expect(page).to have_content("Test 2 Es gibt einen Unternehmensregistrierungsantrag von Co., Ltd.")
      end
      # 5.Klicken Sie in der Antragsliste auf den Link "Antrag auf Unternehmensregistrierung"
      it 'Sie können über den Link zur Seite mit den Unternehmensdetails wechseln' do
        visit admin_notifications_path
        notification = Notification.find_by({receiver_id: admin.id, receiver_class: "admin", sender_id: Company.last.id, sender_class: "company"})
        within '.request-message' do
          click_link 'Antrag auf Unternehmensregistrierung' # ページに同一の文言のリンクがある場合(今回の場合「Antrag auf Unternehmensregistrierung」)、classを指定してあげてwithin囲む
        end
        expect(current_path).to eq admin_company_path(notification.sender_id)
      end
      # 6.Gehen Sie zur Seite zum Bearbeiten der Registrierungsinformationen
      it 'Übergang zum Bearbeitungsbildschirm' do
        visit admin_company_path(Company.last.id)
        click_link 'Bearbeiten'
        expect(current_path).to eq edit_admin_company_path(Company.last.id)
      end
      # 7.Achten Sie auf das Optionsfeld
      it 'Antragsstatus genehmigen lassen' do
        visit edit_admin_company_path(Company.last.id)
        choose "company_approved_true" #Überprüfen Sie den Antragsstatus als genehmigt (Unternehmen)._approved_true ist die ID des Optionsfeldelements)
        click_button 'Speichern Sie Ihre Änderungen'
        expect(page).to have_content 'Die Aktualisierung der Unternehmensinformationen ist abgeschlossen.'
        expect(current_path).to eq admin_company_path(Company.last.id)
      end
    end

    describe 'Unternehmen: Login-Test' do
      context 'Unternehmensanmeldung vor Genehmigung' do
        it 'Die Anmeldung schlägt fehl und Sie werden aufgefordert, sich nach Erhalt der E-Mail erneut anzumelden' do
          visit new_company_session_path
          fill_in 'Mail Adresse', with: "[email protected]"
          fill_in 'Passwort', with: "test2company"
          click_button 'Einloggen'
          expect(page).to have_content 'Der Registrierungsantrag wurde nicht genehmigt. Es tut uns leid, aber bitte warten Sie eine Weile, bis Sie die genehmigte E-Mail erhalten.'
        end
      end

      context 'Unternehmensanmeldung nach Genehmigung' do
        before do
          login_as(admin) #Admin Login
          visit edit_admin_company_path(Company.last.id)
          choose "company_approved_true" #Überprüfen Sie den Antragsstatus als genehmigt (Unternehmen)._approved_true ist die ID des Optionsfeldelements)
          click_button 'Speichern Sie Ihre Änderungen'
          click_on 'Ausloggen'
          visit new_company_session_path
        end
        it 'erfolgreicher Login' do
          fill_in 'Mail Adresse', with: "[email protected]"
          fill_in 'Passwort', with: "test2company"
          click_button 'Einloggen'
          expect(page).to have_content 'Sie sind jetzt angemeldet.'
        end
        it 'Anmeldung fehlgeschlagen' do
          fill_in 'Mail Adresse', with: ""
          fill_in 'Passwort', with: ""
          click_button 'Einloggen'
          expect(current_path).to eq new_company_session_path
        end
      end
    end
  end

Ich sagte: "Okay, die Datei wurde auch erstellt ** let (: admin) {FactoryBot.create (: admin)} ** ... und jetzt können Sie die Variable admin verwenden!"

Die obige Beschreibung, die auf den ersten Blick in Ordnung zu sein scheint, war der Eingang zum Sumpf.

  1. ** Corporation füllt das Registrierungsantragsformular aus ** Im Vorher-Block füllt das Unternehmen das Registrierungsantragsformular aus und beschreibt bis zu dem Punkt, an dem die Antragstaste gedrückt wird. Zu diesem Zeitpunkt wurde die Anwendungsbenachrichtigung an den Administrator gesendet.

  2. ** Stolperpunkt: Umarmen: Melden Sie sich als Administrator an "lassen Sie die Auswertung verzögern" ** Ich sagte: "Okay, melden Sie sich zuerst als Administrator an, um die Anwendung zu genehmigen ... das? Irgendwie schlägt der Test fehl, warum ... ??" Ich konnte keinen Grund finden, warum der Test hier für eine Weile fehlschlug und fiel in eine negative Spirale. Wenn Sie genau hinschauen, sehen Sie die Beschreibung von let (: admin) {FactoryBot.create (: admin)}, und der bemerkenswerte Teil ist ** let (: admin) **. Auf den ersten Blick scheint es kein Problem zu geben, aber wie ich bereits erwähnt habe, hat es die Eigenschaft ** "verzögerte Bewertung" **. Was ist eine Verzögerungsbewertung? Wenn Sie denken:, lesen Sie bitte diesen Artikel. Seien Sie vorsichtig beim Erstellen mit RSpec let ~ Bewertung verzögern ~ Wann benutzt du RSpec let? (Übersetzung) Gemäß diesem Artikel wird die zugewiesene Variable beim Erstellen mit just let zum Zeitpunkt der Referenzierung ausgewertet = Verzögerungsauswertung. Mit anderen Worten, sofern die Variable admin nicht verwendet wird, z. B. "fill_in'email address" mit: admin.email ", wird der Dateninhalt von admin als nicht vorhanden angesehen. Ich verstehe, aber ich dachte, ich schreibe admin, aber als ich ** let! ** versuchte, bestand der Test erfolgreich. Hmmm, ich habe bestanden, aber ich frage mich warum ... Ich dachte, es lag daran, dass sich einige der Beschreibungen überschnitten, aber ich habe es doch nicht verstanden. .. Wenn Sie damit vertraut sind, lassen Sie es mich bitte wissen. ..

  3. ** Bestätigen Sie, dass sich der Administrator angemeldet hat, da der Unternehmensregistrierungsantrag formuliert ist ** Nachdem sich der Administrator angemeldet hat, befindet sich in der Kopfzeile ein Link * Unternehmensregistrierungsanwendung *. Stellen Sie daher sicher, dass dieser angezeigt wird, und bestätigen Sie, dass Sie sich angemeldet haben.

  4. ** Klicken Sie auf den Link für den Antrag auf Unternehmensregistrierung und bestätigen Sie den Namen des antragstellenden Unternehmens ** Wenn Sie auf den Link in der Kopfzeile klicken, wird der Firmenname angezeigt. Überprüfen Sie daher, ob es sich um die Firma handelt, für die Sie sich in 1 beworben haben.

  5. ** Stolperpunkt: Umarmen: "Klicken Sie auf den Link" Unternehmensregistrierung aus der Bewerbungsliste beantragen "** Ich bin hier gestolpert. Was Sie beachten sollten, ist der Teil, der von ** inside'.request-message 'do ** umgeben ist. Was ich jetzt tun möchte, ist auf den Link "Antrag auf Unternehmensregistrierung" zu klicken und zur Seite mit den Unternehmensdetails zu wechseln. Normalerweise sollten Sie in der Lage sein, mit click_link oder click_on zu wechseln. Es hat jedoch nicht funktioniert und ich habe einen Fehler erhalten. Hier ist die Fehleranweisung zu diesem Zeitpunkt.

`Capybara::Ambiguous: Mehrdeutige Übereinstimmung, 2 Elemente gefunden, die dem sichtbaren Link "Unternehmensregistrierungsanwendung" entsprechen ``

Um dies zusammenzufassen ** Kapibara "Oh, es gibt zwei Links namens" Unternehmensregistrierungsantrag ", zu welchem sollte ich gehen?" ** Es bedeutet, dass · · · Ich habe es hier bemerkt.

法人登録申請 Es gibt zwei ... Es tut mir leid, Kapibara ... Geben Sie als Ergebnis der gegoogelten Verbesserungsmethode anstelle von ~~ click_link den ID-Namen (request_message) an, der für den Zielteil der Ansicht eindeutig ist, und der Testcode lautet ** find ("# request_message"). Click ** Es wurde durch die Beschreibung gelöst. Geben Sie die ID an und klicken Sie auf die Zielperson. ~~ ** Hinzugefügt am 01. Oktober 2020 ** Wie im Kommentar empfohlen, wurde es mit innerhalb gelöst. Dies ist besser, weil es nur klickt, wie es im Browser aussieht!

②spec/system/companies_spec.rb


within '.request-message' do
  click_link 'Antrag auf Unternehmensregistrierung' # ページに同一の文言のリンクがある場合(今回の場合「Antrag auf Unternehmensregistrierung」)、classを指定してあげてwithinで囲む
end
<td class="text-center request-message"> #Anforderung an den Zielteil der Ansicht-Geben Sie eine Klasse namens message an. Ziel hier
  <strong><%= notification.sender_name %></strong>Von<%= link_to 'Antrag auf Unternehmensregistrierung', admin_company_path(notification.sender_id) %>es gibt. Bitte überprüfen Sie Ihre Registrierungsdaten.
  <%= " (#{time_ago_in_words(notification.created_at)}Bisherige)" %>
</td>
  1. ** Zur Seite zum Bearbeiten der Registrierungsinformationen gehen ** Hier ist es einfach. Ich werde nicht besonders erklären.

  2. ** Stolperpunkt: Umarmen: "Achten Sie auf Optionsfelder" ** Verwenden Sie die Auswahlfunktion von Capybara, um den genehmigten Anwendungsstatus zu überprüfen. Schreiben Sie in die Form "wählen Sie" company_approved_true "". Woher kommt "company_approved_true"? Wenn Sie das Überprüfungstool von Google verwenden, können Sie sehen, dass der ID-Name im Eingabe-Tag zugewiesen ist. Das Optionsfeld wird in Form einer Auswahl durch Angabe seiner ID angezeigt. Wenn Sie sich jedoch andere Artikel ansehen, gibt es auch Artikel, die die Zeichenfolge im Beschriftungs-Tag als Ziel auswählen. In diesem Fall ist die Zeichenfolge "genehmigt". Bei der Anzeige in einem Browser wählen Sie normalerweise anhand der Zeichenfolge aus. Daher ist es möglicherweise besser, die Methode "Auswahl durch Angabe der ID mit dem Verifizierungswerkzeug" nicht so weit wie möglich zu verwenden. Ich habe es so gemacht, weil der Test nicht bestanden wurde, als ich eine Zeichenkette angegeben habe. Wenn jemand damit vertraut ist, lassen Sie es mich bitte wissen. Selbst wenn der Fehler behoben werden kann, wurde der Teil "Warum ist er" nicht behoben. Es tut mir leid für diejenigen, die diesen Artikel lesen. .. Wenn Sie es herausfinden, lassen Sie es mich bitte wissen: bow_tone1:

法人登録申請

Ja! Aus diesem Grund bestätigt der Administrator die Benachrichtigung - der Antragsgenehmigungstest ist beendet!

Schreiben Sie abschließend einen Test, um festzustellen, ob vor und nach der Genehmigung Anmeldebeschränkungen bestehen. Diejenigen, die es bisher gesehen haben, werden es wahrscheinlich verstehen, also schreiben Sie es bitte unter Bezugnahme auf den Code!

Als Punkt werde ich kurz die Beschreibung login_as (admin ) im Vorher-Block im Corporate-Login-Test nach Genehmigung erläutern! Ich melde mich lediglich als Administrator an, aber die Funktion "login_as" verfügt nicht über die im vorherigen Artikel erwähnte Funktion "Konfiguration zum Aktivieren von Hilfsmethoden in RSpec". Sie können es nicht verwenden, seien Sie also hier vorsichtig! Was ist es? Für diejenigen, die dachten, schrieb der vorherige Artikel [1.] RSpec-Anfänger ModelSpec als Anfänger, dass ich ModelSpec als Anfänger geschrieben habe.

Am Ende

Dieses Mal haben wir hauptsächlich den Authentifizierungstest einzelner Mitglieder und Unternehmensmitglieder anhand von Systemspezifikationen zusammengefasst. Ich habe darüber nachgedacht, einen Test zum Posten, Bearbeiten, DM und Benachrichtigen von Artikeln zu schreiben, aber er war länger als erwartet, daher werde ich ihn hier aufteilen. Ich werde die Systemspezifikationen dieser Funktion beim nächsten Mal veröffentlichen, also hoffe ich, dass Sie sie sehen können, wenn Sie möchten.

Danke, dass du bis zum Ende zugesehen hast!

** Hinzugefügt am 2020.10.01 ** Wie in den Kommentaren empfohlen, haben wir Teile wie fill_in korrigiert. Wenn das Etiketten-Tag zu diesem Zeitpunkt nicht in der richtigen Form geschrieben ist, funktioniert es nicht gut. Seien Sie also vorsichtig. Informationen zum Schreiben finden Sie im Kommentarbereich.

Referenzartikel

[Einführung in RSpec, die verwendet werden kann, Teil 4 "Jede Browseroperation ist kostenlos! Reverse Capybara Encyclopedia"](https://qiita.com/jnchito/items/607f956263c38a5fec24 "Einführung in RSpec, die verwendet werden kann, Teil 4" Jede Browseroperation ist kostenlos ! Reverse Capybara Encyclopedia "") Seien Sie vorsichtig beim Erstellen mit RSpec let ~ Bewertung verzögern ~ Wann benutzt du RSpec let? (Übersetzung)

Recommended Posts

[2.] RSpec-Anfänger haben SystemSpec als Anfänger geschrieben (Numa Edition)
[2.] RSpec-Anfänger haben SystemSpec als Anfänger geschrieben (Numa Edition)
[1st] RSpec-Anfänger haben versucht, Model Spec als Anfänger zu schreiben
[1st] RSpec-Anfänger haben versucht, Model Spec als Anfänger zu schreiben