Ich werde über Rails-Tests schreiben. Dies ist ein Komponententest des Modells mit RSpec. Die Hauptsache ist zu überprüfen, ob die Validierung gut funktioniert.
Installieren Sie zuerst den Edelstein. Bearbeiten Sie das Gemfile und installieren Sie das Bundle.
Gemfile
group :development, :test do
gem 'rspec-rails'
end
# web-Wenn sich das Juwel namens Konsole in der Testumgebung befindet, verschieben Sie es nur in die Entwicklung
group :development do
gem 'web-console'
end
Terminal
$ bundle install
Bereiten Sie als Nächstes eine Datei für rspec vor.
Terminal
$ rails g rspec:install
Ich denke, Sie haben einige Dateien hinzugefügt.
Fügen Sie der .rspec der hinzugefügten Datei Folgendes hinzu.
.rspec
--format documentation
Bereiten Sie als Nächstes die erforderlichen Verzeichnisse vor.
Erstellen Sie ein spec / models
-Verzeichnis
Erstellen Sie als Nächstes eine Datei, um den Testcode in das Modellverzeichnis zu schreiben.
Dieses Mal erstellen wir post_spec.rb
.
Nennen wir die Datei "model name_spec.rb".
Jetzt können Sie loslegen.
Schreiben wir den Testcode.
spec/models/post_spec.rb
require 'rails_helper' # rails_Erforderlich, um Helfer zu verwenden. Bitte schreiben Sie ohne nachzudenken
describe Post do #Über das Post-Modell
describe '#create' do #Informationen zur Aktion "Erstellen"
it "Kann nicht registriert werden, wenn kein Inhalt vorhanden ist" do #Beschreiben Sie den Bestätigungsinhalt des Tests
post = Post.new(content: "") #Erstellen Sie eine Instanz (Daten) des Post-Modells
post.valid? #Stellen Sie beim Speichern einer Instanz sicher, dass sie aufgrund der Validierung nicht gespeichert werden kann.
expect(post.errors[:content]).to include("can't be blank") #In der Fehleranweisung"can't be blank"Bestimmen Sie, ob enthalten ist
end
end
end
Jeder Prozess ist so, wie ich es im Kommentar geschrieben habe, aber wenn Sie ihn einzeln auf der Konsole überprüfen, können Sie ihn etwas besser verstehen. Probieren wir ihn also aus! Lassen Sie uns den Konsolenbildschirm im Terminal starten.
Terminal
$ rails c
Versuchen Sie, den Testcode it ~ end
der Reihe nach auszuführen.
Das im obigen Beispiel verwendete Post-Modell hatte nur wenige Spalten und es war einfach, Testdaten zu erstellen. Bei einem Benutzermodell mit mehreren Informationen wie Name, E-Mail-Adresse und Kennwort ist es jedoch schwierig, die Daten einzeln zu schreiben.
user = User.new(name: "hoge", email: "[email protected]", password: "xxxxxx")
Sie müssen es so schreiben, was zu redundantem Code führt.
Wenn Sie einen Edelstein namens ** FactoryBot ** verwenden, können Sie die Standarddaten vorbereiten und die Daten nur dort ändern, wo Sie sie benötigen. Dies ist praktisch. Ich werde die Einführungsmethode und die Verwendung der Reihe nach schreiben.
Setzen Sie zuerst den Edelstein ein.
Gemfile
group :development, :test do
#Kürzung
gem 'factory_bot_rails'
end
Terminal
$ bundle install
Erstellen Sie ein Verzeichnis "spec / factories".
Erstellen Sie als Nächstes eine Datei, um die Daten in das Fabrikverzeichnis zu schreiben. Dieses Mal werden wir "users.rb" erstellen. Nennen wir die Datei "Modellname Plural .rb". Die Art zu schreiben ist wie folgt.
spec/factories/users.rb
FactoryBot.define do
factory :user do
nickname {"neko"}
email {"[email protected]"}
password {"nyannyan"}
password_confirmation {"nyannyan"}
profile {"hello"}
end
end
Mit factory_bot können Sie einfach eine Instanz mit einer Spezifikationsdatei erstellen.
user_spec.rb
user = FactoryBot.create(:user)
Schreiben Sie einfach und es wird eine in users.rb vorbereitete Instanz erstellt.
Eigentlich ist es etwas einfacher zu schreiben, also lasst uns das auch einstellen.
Weglassen der factory_bot-Notation Fügen Sie rails_helper Folgendes hinzu.
rails_helper.rb
RSpec.configure do |config|
#Fügen Sie Folgendes hinzu
config.include FactoryBot::Syntax::Methods
# (Kürzung)
end
Verwenden Sie dies beispielsweise, um einen Test für das Benutzermodell zu schreiben.
user_spec.rb
require 'rails_helper'
describe User do
describe '#create' do
it "Ohne Spitznamen kann nicht registriert werden" do
user = build(:user, nickname: "")
user.valid?
expect(user.errors[:nickname]).to include("Bitte eingeben")
end
it "Ohne E-Mail kann nicht registriert werden" do
user = build(:user, email: "")
user.valid?
expect(user.errors[:email]).to include("Bitte eingeben")
end
end
end
Sie können eine Instanz erstellen, indem Sie "build (: model name)" wie folgt ausführen. Wenn Sie einen anderen Wert als den von factory_bot erstellten Wert verwenden möchten, z. B. leere Daten, können Sie "build (: Modellname, Spaltenname: Wert)" verwenden.
Sie müssen lediglich einen Befehl vom Terminal aus eingeben, um den Test auszuführen.
Terminal
$ bundle exec rspec
Wenn der Test erfolgreich ist, wird er wie folgt angezeigt.
Wenn dies fehlschlägt, wird die Anzahl der Feilures mit der Anzahl der nicht bestandenen Tests gezählt und der Fehlerinhalt angezeigt.
Der oben beschriebene Befehl bundle exec rspec
führt die gesamte Spezifikationsdatei aus. Wenn Sie also bereits einen verifizierten Test haben, ist dies etwas verschwenderisch.
Terminal
$ bundle exec rspec spec/Verzeichnisname/Dateiname(_spec.rb)
Sie können die Datei angeben und mit ausführen. Am Beispiel des diesmal verwendeten Benutzermodells sieht es wie folgt aus.
Terminal
$ bundle exec rspec spec/models/user_spec.rb
Recommended Posts