Ich werde ein Memorandum über das Verfahren aufbewahren, wenn ich einen Komponententest zur Modellvalidierung mit Rspc durchführe.
Ein typisches Testwerkzeug für Ruby and Rails, ein Juwel, das zum Testen auf Klassen- oder Methodenbasis verwendet wird.
・ Schienen 5.0.7.2 ・ Ruby 2.5.1 ・ Rspec-Schienen 3.9.0 ・ Factory_bot_rails 5.1.1
gemfile
group :development, :test test do
# Ich möchte es in der Entwicklungsumgebung und der Testumgebung verwenden, daher beschreibe ich es hier.
gem 'rspec_rails'
gem 'factory_bot_gem'
end
Wenn Sie gem schreiben können, bündeln Sie die Installation
Am Terminal
$ rails g rspec:install
Wenn die Datei nach Ausführung des Befehls wie unten gezeigt erstellt wird, ist dies in Ordnung.
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
Nachdem die Datei im Terminal erstellt wurde,
--require spec_helper
--format documentation
Fügen Sie diese beiden Anweisungen zur .spec-Datei hinzu und führen Sie den Befehl rspec execute im Terminal aus, um den Vorgang zu überprüfen.
$ bundle exec rspec
# Terminal
No examples found.
Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures
Wenn eine solche Beschreibung im Terminal angezeigt wird, wurde RSpec normal gestartet. Fügen Sie anschließend die Beschreibung des Testcodes zur Datei unter rspec / hinzu.
FactoryBot.define do
factory :user do
nickname {"test"}
email {"[email protected]"}
password {"00000000"}
family_name {"test"}
first_name {"test"}
family_name_kana {"test"}
first_name_kana {"test"}
birthday {"2000-01-01"}
end
end
Indem Sie zuerst ein Modell in Faktolen erstellen und den Wert festlegen, können Sie eine Instanz einfach mit einer bestimmten Methode in der Spezifikationsdatei erstellen oder in der Datenbank speichern. (Es ist nicht erforderlich, Daten zu erstellen, indem Sie einen Wert für die einmalige Durchführung des Tests eingeben.)
user = FactoryBot.build(:user)
Verwenden Sie für facutoryBot die Erstellungsmethode oder die Erstellungsmethode und geben Sie das im Ordner facutories hinzugefügte Modell als Argument an, um den in der Datei ~ s.rb festgelegten Wert abzurufen.
user = FactoryBot.build(:user, email: "")
Auf diese Weise kann der Wert überschrieben werden, indem der Spaltenname nach dem Modell hinzugefügt wird.
Erstellen Sie einen Modellordner im Spezifikationsverzeichnis. Erstellen Sie eine Datei für jedes Modell und führen Sie einen tatsächlichen Test durch.
require 'rails_helper'
describe User do
describe 'registrations#create' do
it "Wenn der Spitzname leer ist, kann er nicht registriert werden"
user = FactoryBot.build(:user, nickname: "" )
user.valid?
erwarten (user.errors [: nickname]). to include ("Bitte eingeben") #include ("kann nicht leer sein") ist korrekt. Da es auf Japanisch umgestellt wurde, sieht es wie links aus.
end
end
Dies ist eine Reihe von Tests.
In der ersten Zeile wird spec / rails_helper.rb geladen. Die zweite und dritte Zeile, die Gruppe von do ~ end unmittelbar nach der Beschreibung, repräsentiert den Ausdruck. Ein Testausdruck für die Registrierungsaktion # create action des Benutzermodells. Unmittelbar danach stellt es einen Satz funktionierender Testcodes dar, und die Erklärung wird in das darauf folgende "" geschrieben. (Beispiel genannt) Generieren Sie in der nächsten Zeile einen Hash und weisen Sie den Wert der Benutzervariablen zu. Verwenden Sie hier die FactoryBot-Methode. Geben Sie den Modellnamen im Argument build an und überschreiben Sie den Wert nur in der Spalte nickname. Wenn Sie die FactoryBot-Methode verwenden, entspricht der folgende Wert.
it "Wenn der Spitzname leer ist, kann er nicht registriert werden"
user = User.new (Spitzname: "", E-Mail: "[email protected]", Passwort: "00000000", Familienname: "test", Vorname: "Test", Familienname_kana: "Test", Vorname_kana: "Test" , Geburtstag: "2020-01-01") #gem unbenutzt
user = FactoryBot.build (: user, nickname: "") Bei Verwendung von #FactoryBot
Verwenden Sie FactoryBotm, damit nicht jedes Mal ein Hash des Werts generiert wird. Verwenden Sie die .valid? -Methode für die Benutzervariable, der der Wert zugewiesen ist. Aktivieren Sie beim Speichern einer Instanz einer Klasse, die ActiveRecord :: Base erbt, die Option "Kann sie durch Validierung gespeichert werden?". Im Benutzermodell wurde diesmal Präsenz: true für alle Spalten überprüft.
Verwenden Sie erwartung (X) .zu Gleichung Y, um zu überprüfen, ob der Wert des Ausdrucks im x-Teil gleich dem Wert im Y-Teil ist. Hier wird die Fehlermethode verwendet. gültig? Der Rückgabewert der Methode ist true / false. Wenn Sie jedoch die Error-Methode für eine Instanz verwenden, die die gültige? -Methode verwendet, können Sie überprüfen, warum sie nicht gespeichert werden kann, wenn sie aufgrund der Validierung nicht gespeichert werden kann. es kann.
In diesem Fall enthält die Spalte mit dem Spitznamen keinen Wert, sodass "Kann nicht leer sein" angezeigt wird. Verwenden Sie den Include-Matcher, um zu überprüfen, ob der als Argument verwendete Wert in dem Array enthalten ist, das das erwartete Argument ist. In diesem Fall "Ich weiß, dass wenn der Spitzname leer ist, eine Fehlermeldung angezeigt wird, die nicht leer sein kann. Schreiben Sie ihn daher als include (" kann nicht leer sein "). Diese Inspektion ist bestanden, Damit ist der Test "Wenn der Spitzname leer ist, kann er nicht registriert werden" abgeschlossen.
Fügen Sie danach einfach die Beschreibung des Komponententests hinzu und führen Sie den Test nacheinander durch.
require 'rails_helper'
describe User do
describe 'registrations#create' do
it "Wenn der Spitzname leer ist, kann er nicht registriert werden"
user = FactoryBot.build(:user, nickname: "" )
user.valid?
erwarten (user.errors [: nickname]). to include ("Bitte eingeben") #include ("kann nicht leer sein") ist korrekt. Da es auf Japanisch umgestellt wurde, sieht es wie rechts aus.
end
it "Wenn die E-Mail leer ist, können Sie sich nicht registrieren"
user = FactoryBot.build(:user, email: "")
user.valid?
erwarten (user.errors [: email]). um einzuschließen (bitte geben Sie "" ein)
end
it "Kann sich nicht registrieren, wenn in der E-Mail kein" @ "enthalten ist
user = FactoryBot.build(:user, email: "test.gmail.com")
user.valid?
erwarten (user.errors [: email]). to include ("ist ein ungültiger Wert")
end
it "Ungültig für doppelte E-Mail-Adressen"
user1 = FactoryBot.create(:user)
user2 = FactoryBot.build(:user)
user2.valid?
erwarten (user2.errors [: email]). to include ("existiert bereits")
end
it "Wenn das Passwort leer ist, können Sie sich nicht registrieren"
user = FactoryBot.build(:user, password: "" )
user.valid?
Erwarten Sie (user.errors [: password]). (bitte geben Sie "" ein)
end
it "Kann nicht registriert werden, wenn das Passwort 6 Zeichen oder weniger enthält"
user = FactoryBot.build(:user, password: "00000")
user.valid?
Erwarten Sie (user.errors [: password]). ("Bitte geben Sie mindestens 6 Zeichen ein")
end
it "Wenn Familienname leer ist, können Sie sich nicht registrieren"
user = FactoryBot.build(:user, family_name: "" )
user.valid?
Erwarten Sie (user.errors [: family_name]). to include (bitte geben Sie "" ein)
end
it "Wenn der Vorname leer ist, können Sie sich nicht registrieren"
user = FactoryBot.build(:user, first_name: "" )
user.valid?
Erwarten Sie (user.errors [: first_name]). to include (bitte geben Sie "" ein)
end
it "Wenn family_name_kana leer ist, können Sie sich nicht registrieren" do
user = FactoryBot.build(:user, family_name_kana: "" )
user.valid?
Erwarten Sie (user.errors [: family_name_kana]). to include (bitte geben Sie "" ein)
end
it "Wenn Vorname_kana leer ist, können Sie sich nicht registrieren"
user = FactoryBot.build(:user, first_name_kana: "" )
user.valid?
erwarten (user.errors [: first_name_kana]). um einzuschließen (bitte geben Sie "" ein)
end
it "Wenn der Geburtstag leer ist, können Sie sich nicht registrieren"
user = FactoryBot.build(:user, birthday: "" )
user.valid?
erwarten (user.errors [: geburtstag]). einschließen (bitte "" eingeben)
end
end
end
Der Test zur Validierung des Benutzermodells ist oben abgeschlossen.
・ Https://programming-beginner-zeroichi.jp/articles/61 ・ Https://www.sejuku.net/blog/47847 ・ Htps: // Diese m / shojikishindoi / n / n 5019bc64c254