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.
** Ziel **
Ich versuche RSpec zu schreiben, bin mir aber nicht sicher, was es ist ~: umarmen: Für Anfänger.
Mr. Itos [Einführung in verwendbare RSpec, Teil 1 "Grundlegende Syntax und nützliche Funktionen von RSpec"](https://qiita.com/jnchito/items/42193d066bd61c740612 "Einführung in verwendbare RSpec, Teil 1" Verstehen Sie die grundlegende Syntax und die nützlichen Funktionen von RSpec "")
Es ist wünschenswert, die Rolle der Beschreibung zu verstehen, zumindest zu erwarten, beispielsweise den Inhalt dieses Artikels in gewissem Umfang zu betrachten oder etwas getan zu haben.
** Referenzcode ** Wie oben erwähnt, werde ich es unter Bezugnahme auf mein eigenes Portfolio beschreiben, daher werde ich hier den GitHub-Link veröffentlichen, aber das Testziel ist die Site Bitte beachten Sie, dass wir uns auf Kernfunktionen konzentrieren. ** [Kernfunktionen der Website] ** (Neue Registrierung / Anmeldung / Bearbeitung von Einzelpersonen / Unternehmensmitgliedern, Antrag auf Registrierung von Unternehmensmitgliedern, Veröffentlichung / Bearbeitung von Artikeln, DM, Benachrichtigung usw.)
** Vorbereitung zum Schreiben von Tests ** Um einen Test mit RSpec zu schreiben, müssen einige Edelsteine eingefügt und gesetzt werden, einschließlich gem'rspec-Rails '. Bitte bereiten Sie sich darauf vor, den Test zuerst zu schreiben und dann zu lesen. Was Sie benötigen, wird in "Alltägliche Rails-Einführung in Rails-Tests mit RSpec" beschrieben. Oder besser gesagt, wenn Sie sich das ansehen, können Sie es verstehen, ohne diesen Artikel zu lesen. Wenn Sie den Code als konkretes Beispiel sehen möchten, lesen Sie ihn bitte so wie er ist. (Es ist wirklich nur als Referenz)
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.
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
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)
②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 "")
visit new_user_registration_path
⇨ Sie sind zum neuen Registrierungsbildschirm übergegangen.fill_in'First name (last name) ', with:" Test "
⇨ Geben Sie die Zeichenfolge "test" in das Textfeld first name (last name) ein. Geben Sie auch die folgenden Registrierungsinformationen ein.click_button'Neue Registrierung'
⇨ Klicken Sie auf die Schaltfläche für die neue Registrierung.require (page) .to have_content'Account-Registrierung ist abgeschlossen. '
⇨ Wenn Sie keine Adresse oder kein Passwort eingeben, das bereits verwendet wird, ist die Kontoregistrierung erfolgreich. ** Die Kontoregistrierung ist abgeschlossen. Sie sollten die Meldung ** auf Ihrem Bildschirm sehen. 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.
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
Im Gegensatz zur neuen Registrierung einzelner Mitglieder hat die neue Registrierung eines Unternehmens den folgenden Ablauf.
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
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.
②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
Die obige Beschreibung, die auf den ersten Blick in Ordnung zu sein scheint, war der Eingang zum Sumpf.
** 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.
** 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. ..
** 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.
** 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.
** 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>
** Zur Seite zum Bearbeiten der Registrierungsinformationen gehen ** Hier ist es einfach. Ich werde nicht besonders erklären.
** 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.
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.
[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