Dieses Mal geben wir die Methode aus, während wir einen Komponententest des Modells für die Registrierung neuer Benutzer implementieren. Die Spezifikationen für die Benutzerregistrierung lauten wie folgt.
Spitzname erforderlich
Die E-Mail-Adresse ist eindeutig
Mail-Adresse ist@Und Domain muss enthalten sein
Passwort erforderlich
Das Passwort muss aus mindestens 7 Zeichen bestehen
Geben Sie das Passwort zweimal ein, auch zur Bestätigung
Für den Vor- und Nachnamen ist ein richtiger Benutzername erforderlich
Lassen Sie den richtigen Namen des Benutzers in voller Breite eingeben
Für den Vor- und Nachnamen ist eine Frigana des tatsächlichen Namens des Benutzers erforderlich
Lassen Sie den richtigen Namen des Benutzers Frigana in voller Breite eingeben
Geburtsdatum ist erforderlich
Die Migrationsdatei lautet wie folgt.
20200823050614_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
## Database authenticatable
t.string :nickname, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
t.string :family_name, null: false
t.string :family_name_kana, null: false
t.string :first_name, null: false
t.string :first_name_kana, null: false
t.date :birth_day, null: false
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
Das Modell ist wie folgt.
user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
#Validierungseinstellungen(Eindeutigkeitsbeschränkung, um zu verhindern, dass leere Zeichenfolgen gespeichert werden)
validates :nickname, presence: true
validates :encrypted_password, presence: true
validates :family_name, presence: true
validates :family_name_kana, presence: true
validates :first_name, presence: true
validates :first_name_kana, presence: true
validates :birth_day, presence: true
#Verband
has_many :cards, dependent: :destroy
has_many :shipping_infos, dependent: :destroy
has_many :comments, dependent: :destroy
has_many :items
end
** ① Vorbereitung für RSpec ** ** ② RSpec-Einstellungen ** ** ③ Werksbot einführen ** ** ④ Implementierung von factory_bot ** ** ⑤ Beschreibung des regulären Ausdrucks ** ** ⑥ Implementierung des Testcodes ** ** ⑦ Ausführung des Testcodes **
Installieren Sie zuerst Gem.
Gemfile.rb
group :development, :test do
#Kürzung
gem 'rspec-rails'
end
group :development do
gem 'web-console'
end
# web_Wenn die Konsole bereits eine Beschreibung hat, verschieben Sie einfach den Beschreibungsort. Bitte beachten Sie, dass es beim Hinzufügen möglicherweise dupliziert wird.
Vergessen Sie nach dem Bearbeiten der Gemfile nicht, die Bundle-Installation auszuführen.
Nehmen Sie als Nächstes die Grundeinstellungen für RSpec vor. Erstellen Sie zunächst eine Einstellungsdatei für RSpec.
Terminal.
$ rails g rspec:install
#Erfolg, wenn die Datei wie folgt erstellt wird ▼
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
Fügen Sie als Nächstes Folgendes zu .rspec
hinzu.
.rspec.
--format documentation
Legen Sie als Nächstes das Verzeichnis für RSpec fest.
Die Datei, in die der Testcode von RSpec geschrieben wird, wird als Spezifikationsdatei bezeichnet, und alle Spezifikationsdateien werden in dem Spezifikationsverzeichnis gespeichert, das mit dem vorherigen Befehl rails g rspec: install
generiert wurde. Erstellen Sie sie daher hier. Lass es uns behalten.
Eine Testdatei für Modelle wird unter spec / models / und eine Testdatei für Controller unter spec / controller / gespeichert. In diesem Verzeichnis befindet sich der gesamte Code unter dem zu testenden App-Verzeichnis.
Die Spezifikationsdatei heißt _spec.rb mit der entsprechenden Klasse. Dieses Mal erstellen wir zuerst eine Spezifikationsdatei für "user.rb", daher lautet der Name in diesem Fall "user_spec.rb".
Überprüfen Sie nach dem Erstellen des Verzeichnisses einmal, ob ** RSpec ** normal verwendet werden kann.
Terminal.
$ bundle exec rspec
#Wenn das Ergebnis wie folgt lautet, ist es in Ordnung, da es normal funktioniert.
No examples found.
Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures
Dann installieren Sie ** factory_bot **. Installieren Sie Gem.
Gemfile.rb
group :development, :test do
#Kürzung
gem 'rspec-rails'
gem 'factory_bot_rails'
end
Führen Sie dann die Bundle-Installation aus.
Erstellen Sie als Nächstes ein Verzeichnis mit dem Namen "Fabriken" direkt unter dem Spezifikationsverzeichnis und erstellen Sie darin eine Ruby-Datei mit dem Plural-Dateinamen der erstellten Instanz. In diesem Fall ist es "users.rb".
Bearbeiten Sie users.rb
wie folgt.
users.rb
FactoryBot.define do
factory :user do
nickname {"tarou"}
email {"[email protected]"}
password {"1234567"}
encrypted_password {"1234567"}
family_name {"Yamada"}
family_name_kana {"Yamada"}
first_name {"Taro"}
first_name_kana {"Taro"}
birth_day {"2000-01-01"}
end
end
Diese Beschreibung erstellt den Inhalt gemäß den Spezifikationen als Dummy-Daten, sodass Sie eine Instanz einfach mit einer bestimmten Methode (Erstellen oder Erstellen) in der Spezifikationsdatei erstellen oder in der Datenbank speichern können. Es wird so sein.
Stellen Sie als Nächstes den regulären Ausdruck in der Validierung gemäß den Spezifikationen ein. Die erforderlichen regulären Ausdrücke sind:
Das Passwort muss aus mindestens 7 Zeichen bestehen
Lassen Sie den richtigen Namen des Benutzers in voller Breite eingeben
Lassen Sie den richtigen Namen des Benutzers Frigana in voller Breite eingeben
Basierend auf diesen ist die Beschreibung im Modell wie folgt.
user.rb
class User < ApplicationRecord
#Kürzung
validates :nickname, presence: true
validates :encrypted_password, presence: true, length: { minimum: 7 } #Hier ist der reguläre Ausdruck für die Anzahl der Zeichen
validates :family_name, presence: true, format: {with: /\A[Ah-Hmm-Einer-龥]/ } #Dies ist der echte Name des Benutzers in voller Breite
validates :family_name_kana, presence: true, format: {with: /\A[EIN-Wagen-]+\z/ } #Dies ist der reguläre Ausdruck von Frigana in voller Breite
validates :first_name, presence: true, format: {with: /\A[Ah-Hmm-Einer-龥]/ } #Dies ist der echte Name des Benutzers in voller Breite
validates :first_name_kana, presence: true, format: {with: /\A[EIN-Wagen-]+\z/ } #Dies ist der reguläre Ausdruck von Frigana in voller Breite
#Kürzung
end
Auf der folgenden Website finden Sie reguläre Ruby-Ausdrücke. https://gist.github.com/nashirox/38323d5b51063ede1d41
Jetzt ist es Zeit, den Testcode zu implementieren! Beachten Sie beim Schreiben von Testcode die folgenden Punkte:
① In jedem Beispiel wird ein Wert erwartet
② Beschreiben Sie das erwartete Ergebnis klar und deutlich
③ Testen Sie sowohl, was passieren soll als auch was nicht
④ Machen Sie es mäßig trocken, während Sie die Lesbarkeit berücksichtigen
Schreiben Sie den folgenden Code in user_spec.rb.
user_spec.rb
require 'rails_helper'
describe User do
describe '#create' do
end
end
Da dies ein Komponententest des Benutzermodells ist, wird es "User Do beschreiben" sein, und da ein neuer Benutzer erstellt wird, wird es "# Do" Do beschreiben "und der Testcode wird in der Beschreibung in der zweiten Zeile geschrieben.
Testen Sie zunächst, ob Sie sich registrieren können, wenn alle Elemente eingegeben wurden **. Der Code und seine Erklärung lauten wie folgt.
user_spec.rb
require 'rails_helper'
describe User do
describe '#create' do
#Test bei Eingabe ▼
it "Eine Registrierung ist möglich, wenn alle Artikel eingegeben wurden" do #Was möchten Sie testen?
user = build(:user) #Verwenden der Erstellungsmethode für den variablen Benutzer "factory"_Ersetzen Sie Bot-Dummy-Daten
expect(user).to be_valid #Führen Sie einen Test durch, um festzustellen, ob die Registrierung mit den Informationen des variablen Benutzers erfolgt
end
end
end
Der nächste Test ist wie folgt.
Ohne Spitznamen kann nicht registriert werden
Ohne E-Mail kann nicht registriert werden
Ohne Passwort kann nicht registriert werden
encrypted_Ohne Passwort kann nicht registriert werden
family_Ohne Namen kann nicht registriert werden
family_name_Ohne Kana kann ich mich nicht registrieren
first_Ohne Namen kann nicht registriert werden
first_name_Ohne Kana kann ich mich nicht registrieren
birth_Kann sich nicht registrieren, wenn es keinen Tag gibt
Diese Bedingungen dienen zum Testen der erforderlichen Elemente (null: false, Anwesenheit: true) in der Spezifikation. Beschreiben wir es. Die Erklärung wird im Testteil von ** Kann nicht ohne Spitznamen ** registriert werden.
user.spec.rb
require 'rails_helper'
describe User do
describe '#create' do
#Test bei Eingabe ▼
it "Eine Registrierung ist möglich, wenn alle Artikel eingegeben wurden" do
user = build(:user)
expect(user).to be_valid
end
# nul:false, presence:Wahrer Test ▼
it "Ohne Spitznamen kann nicht registriert werden" do #Was möchten Sie testen?
user = build(:user, nickname: nil) #Verwenden der Erstellungsmethode für den variablen Benutzer "factory"_Ersetzen Sie Bot-Dummy-Daten(Setzen Sie in diesem Fall absichtlich den Wert von nickname auf)
user.valid? #Verwenden Sie die Validierungsmethode, um zu testen, ob sie aufgrund der Validierung nicht gespeichert werden kann.
expect(user.errors[:nickname]).to include("Bitte eingeben") #Verwenden Sie die Fehlermethode, um zu überprüfen, warum ich nicht speichern kann, wenn die Validierung nicht funktioniert..to include("Bitte eingeben")Schreiben Sie die Fehleranweisung in(Da diese Rails ins Japanische übersetzt werden, ist der Fehlersatz auch auf Japanisch)
end
it "Ohne E-Mail kann nicht registriert werden" do
user = build(:user, email: nil)
user.valid?
expect(user.errors[:email]).to include("Bitte eingeben")
end
it "Ohne Passwort kann nicht registriert werden" do
user = build(:user, password: nil)
user.valid?
expect(user.errors[:password]).to include("Bitte eingeben")
end
it "encrypted_Ohne Passwort kann nicht registriert werden" do
user = build(:user, encrypted_password: nil)
user.valid?
expect(user.errors[:encrypted_password]).to include("Bitte eingeben")
end
it "family_Ohne Namen kann nicht registriert werden" do
user = build(:user, family_name: nil)
user.valid?
expect(user.errors[:family_name]).to include("Bitte eingeben")
end
it "family_name_Ohne Kana kann ich mich nicht registrieren" do
user = build(:user, family_name_kana: nil)
user.valid?
expect(user.errors[:family_name_kana]).to include("Bitte eingeben")
end
it "first_Ohne Namen kann nicht registriert werden" do
user = build(:user, first_name: nil)
user.valid?
expect(user.errors[:first_name]).to include("Bitte eingeben")
end
it "first_name_Ohne Kana kann ich mich nicht registrieren" do
user = build(:user, first_name_kana: nil)
user.valid?
expect(user.errors[:first_name_kana]).to include("Bitte eingeben")
end
it "birth_Kann sich nicht registrieren, wenn es keinen Tag gibt" do
user = build(:user, birth_day: nil)
user.valid?
expect(user.errors[:birth_day]).to include("Bitte eingeben")
end
end
end
Als Nächstes testen wir die Eindeutigkeitsbeschränkung von E-Mails.
user.spec.rb
require 'rails_helper'
describe User do
describe '#create' do
#Kürzung
#E-Mail-Eindeutigkeitsbeschränkungstest ▼
it "Kann nicht registriert werden, wenn doppelte E-Mails vorhanden sind" do
user = create(:user) #Factory, um Benutzer und Datenbank mithilfe der Erstellungsmethode zu variieren_Speichern Sie Bot-Dummy-Daten
another_user = build(:user, email: user.email) #Zweitens eine andere_Erstellen Sie einen Benutzer als Variable und verwenden Sie die Erstellungsmethode, um E-Mail-Inhalte absichtlich zu duplizieren
another_user.valid? # another_Testbenutzer "Kann aufgrund von Validierung nicht gespeichert werden"
expect(another_user.errors[:email]).to include("Ist bereits vorhanden") #Verwenden Sie die Fehlermethode, um die E-Mail "Warum kann ich aufgrund einer Validierung nicht speichern?" Zu überprüfen und die Fehleranweisung zu schreiben, die sie verursacht hat.
end
end
end
Führen Sie als Nächstes einen Test aus, der ohne ein Bestätigungskennwort nicht registriert werden kann.
user.spec.rb
require 'rails_helper'
describe User do
describe '#create' do
#Kürzung
#Test, für den ein Bestätigungskennwort erforderlich ist ▼
it "verschlüsselt, auch wenn Passwort existiert_Ohne Passwort kann nicht registriert werden" do
user = build(:user, encrypted_password: "") #Leeren Sie absichtlich den Wert des Bestätigungskennworts
user.valid?
expect(user.errors[:encrypted_password]).to include("Bitte eingeben", "Bitte geben Sie mindestens 7 Zeichen ein")
end
end
end
Zu diesem Zeitpunkt wurden die folgenden Tests abgeschlossen.
#Test abgeschlossen ▼
Spitzname erforderlich#Erledigt
Die E-Mail-Adresse ist eindeutig#Erledigt
Mail-Adresse ist@Und Domain muss enthalten sein#Erledigt
Passwort erforderlich#Erledigt
Geben Sie das Passwort zweimal ein, auch zur Bestätigung#Erledigt
Für den Vor- und Nachnamen ist ein richtiger Benutzername erforderlich#Erledigt
Für den Vor- und Nachnamen ist eine Frigana des tatsächlichen Namens des Benutzers erforderlich#Erledigt
Geburtsdatum ist erforderlich#Erledigt
#Test soll ab sofort durchgeführt werden ▼
Das Passwort muss aus mindestens 7 Zeichen bestehen
Lassen Sie den richtigen Namen des Benutzers in voller Breite eingeben
Lassen Sie den richtigen Namen des Benutzers Frigana in vollem Winkel eingeben
Testen wir nun den zuvor beschriebenen regulären Ausdruck. Zuallererst ist das Passwort ein Test mit 7 Zeichen oder mehr.
Testen Sie sowohl ** was Sie wollen als auch was Sie nicht wollen **.
user.spec.rb
require 'rails_helper'
describe User do
describe '#create' do
#Kürzung
#Test der Kennwortanzahl ▼
it "Sie können sich registrieren, wenn das Passwort aus 7 Zeichen oder mehr besteht" do
user = build(:user, password: "1234567", encrypted_password: "1234567") #Legen Sie mithilfe der Erstellungsmethode ein 7-stelliges Kennwort fest
expect(user).to be_valid
end
it "Kann nicht registriert werden, wenn das Passwort 7 Zeichen oder weniger enthält" do
user = build(:user, password: "123456", encrypted_password: "123456") #Legen Sie absichtlich ein 6-stelliges Passwort fest, um zu testen, ob ein Fehler auftritt
user.valid?
expect(user.errors[:encrypted_password]).to include("Bitte geben Sie mindestens 7 Zeichen ein")
end
end
end
Schließlich werden wir die Eingabe in voller Breite und die Kana-Eingabe in voller Breite testen.
user.spec.rb
require 'rails_helper'
describe User do
describe '#create' do
#Kürzung
#Nennen Sie den Eingangstest in voller Breite ▼
it 'family_Eine Registrierung ist nur möglich, wenn der Name in voller Breite eingegeben wurde' do
user = build(:user, family_name: "Aio") #Geben Sie absichtlich die halbe Breite ein und erzeugen Sie einen Fehler
user.valid?
expect(user.errors[:family_name]).to include("Ist ein ungültiger Wert")
end
it 'first_Eine Registrierung ist nur möglich, wenn der Name in voller Breite eingegeben wurde' do
user = build(:user, first_name: "Aio") #Geben Sie absichtlich die halbe Breite ein und erzeugen Sie einen Fehler
user.valid?
expect(user.errors[:first_name]).to include("Ist ein ungültiger Wert")
end
#Katakana-Eingabetest in voller Breite ▼
it 'family_name_Nur Katakana in voller Breite kann für Kana registriert werden' do
user = build(:user, family_name_kana: "AIUEO") #Geben Sie absichtlich Hiragana ein, um einen Fehler zu generieren
user.valid?
expect(user.errors[:family_name_kana]).to include("Ist ein ungültiger Wert")
end
it 'first_name_Nur Katakana in voller Breite kann für Kana registriert werden' do
user = build(:user, first_name_kana: "AIUEO") #Geben Sie absichtlich Hiragana ein, um einen Fehler zu generieren
user.valid?
expect(user.errors[:first_name_kana]).to include("Ist ein ungültiger Wert")
end
end
end
Damit ist die Funktionsprüfung gemäß den Spezifikationen abgeschlossen. Das Endergebnis ist wie folgt.
user.spec.rb
require 'rails_helper'
describe User do
describe '#create' do
#Test bei Eingabe ▼
it "Eine Registrierung ist möglich, wenn alle Artikel eingegeben wurden" do
user = build(:user)
expect(user).to be_valid
end
# nul:false, presence:Wahrer Test ▼
it "Ohne Spitznamen kann nicht registriert werden" do
user = build(:user, nickname: nil)
user.valid?
expect(user.errors[:nickname]).to include("Bitte eingeben")
end
it "Ohne E-Mail kann nicht registriert werden" do
user = build(:user, email: nil)
user.valid?
expect(user.errors[:email]).to include("Bitte eingeben")
end
it "Ohne Passwort kann nicht registriert werden" do
user = build(:user, password: nil)
user.valid?
expect(user.errors[:password]).to include("Bitte eingeben")
end
it "encrypted_Ohne Passwort kann nicht registriert werden" do
user = build(:user, encrypted_password: nil)
user.valid?
expect(user.errors[:encrypted_password]).to include("Bitte eingeben")
end
it "family_Ohne Namen kann nicht registriert werden" do
user = build(:user, family_name: nil)
user.valid?
expect(user.errors[:family_name]).to include("Bitte eingeben")
end
it "family_name_Ohne Kana kann ich mich nicht registrieren" do
user = build(:user, family_name_kana: nil)
user.valid?
expect(user.errors[:family_name_kana]).to include("Bitte eingeben")
end
it "first_Ohne Namen kann nicht registriert werden" do
user = build(:user, first_name: nil)
user.valid?
expect(user.errors[:first_name]).to include("Bitte eingeben")
end
it "first_name_Ohne Kana kann ich mich nicht registrieren" do
user = build(:user, first_name_kana: nil)
user.valid?
expect(user.errors[:first_name_kana]).to include("Bitte eingeben")
end
it "birth_Kann sich nicht registrieren, wenn es keinen Tag gibt" do
user = build(:user, birth_day: nil)
user.valid?
expect(user.errors[:birth_day]).to include("Bitte eingeben")
end
#Test der Kennwortanzahl ▼
it "Sie können sich registrieren, wenn das Passwort aus 7 Zeichen oder mehr besteht" do
user = build(:user, password: "1234567", encrypted_password: "1234567")
expect(user).to be_valid
end
it "Kann nicht registriert werden, wenn das Passwort 7 Zeichen oder weniger enthält" do
user = build(:user, password: "123456", encrypted_password: "123456")
user.valid?
expect(user.errors[:encrypted_password]).to include("Bitte geben Sie mindestens 7 Zeichen ein")
end
#E-Mail-Eindeutigkeitsbeschränkungstest ▼
it "Kann nicht registriert werden, wenn doppelte E-Mails vorhanden sind" do
user = create(:user)
another_user = build(:user, email: user.email)
another_user.valid?
expect(another_user.errors[:email]).to include("Ist bereits vorhanden")
end
#Test, für den ein Bestätigungskennwort erforderlich ist ▼
it "verschlüsselt, auch wenn Passwort existiert_Ohne Passwort kann nicht registriert werden" do
user = build(:user, encrypted_password: "")
user.valid?
expect(user.errors[:encrypted_password]).to include("Bitte eingeben", "Bitte geben Sie mindestens 7 Zeichen ein")
end
#Name der Identitätsüberprüfung in voller Breite ▼
it 'family_Es können nur Eingaben in voller Breite registriert werden' do
user = build(:user, family_name: "Aio")
user.valid?
expect(user.errors[:family_name]).to include("Ist ein ungültiger Wert")
end
it 'first_Eine Registrierung ist nur möglich, wenn der Name in voller Breite eingegeben wurde' do
user = build(:user, first_name: "Aio")
user.valid?
expect(user.errors[:first_name]).to include("Ist ein ungültiger Wert")
end
#Identitätsprüfung Katakana Eingabetest in voller Breite ▼
it 'family_name_Nur Katakana in voller Breite kann für Kana registriert werden' do
user = build(:user, family_name_kana: "AIUEO")
user.valid?
expect(user.errors[:family_name_kana]).to include("Ist ein ungültiger Wert")
end
it 'first_name_Nur Katakana in voller Breite kann für Kana registriert werden' do
user = build(:user, first_name_kana: "AIUEO")
user.valid?
expect(user.errors[:first_name_kana]).to include("Ist ein ungültiger Wert")
end
end
end
Führen Sie den folgenden Befehl im Terminal des Verzeichnisses der Anwendung aus, die den Test beschreibt.
Terminal.
$ bundle exec rspec
Wenn die Verarbeitung dann wie in der Abbildung unten gezeigt durchgeführt wird, ist der Test erfolgreich.
Wenn Sie im Komponententest des Modells die grundlegende Grammatik, den Prozess, der einen Fehler verursacht, und den Prozess, der dies nicht tut, verstehen und jede Methode verstehen, können Sie Code schreiben, selbst wenn eine neue Funktion hinzugefügt wird.
Wenn Sie Bedenken haben, teilen Sie uns dies bitte in den Kommentaren mit! Danke, dass du bis zum Ende zugesehen hast!