Tests, die ich vermieden habe, weil ich dachte, es wäre schwierig. Ich bin dabei, den Dienst ernsthaft zu starten, daher werde ich in diesem Artikel schreiben, was ich als ersten Schritt gelernt habe, um den Test fest zu verstehen. Es ist ein sogenanntes Memorandum. Da ich selbst Anfänger bin, werde ich aus Anfängersicht schreiben. Ich wäre Ihnen dankbar, wenn Sie einen Kommentar abgeben könnten, wenn es mehr Schreibstile und Methoden wie diese gibt!
Wir werden die Regeln einführen. Nun, ohne an irgendetwas zu denken
Gemfile
group :development, :test do
...Kürzung...
gem 'rspec-rails'
end
group :development do
gem 'web-console' #Möglicherweise wurde es ursprünglich aufgeführt.
end
Führen Sie nach dem Bearbeiten der Gemfile die übliche Bundle-Installation durch.
Zunächst müssen Sie eine Konfigurationsdatei für RSpec erstellen. Am Terminal
$ rails g rspec:install
Dann wird die folgende Datei generiert.
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
Fügen Sie der ***. Rspec *** -Datei der generierten Dateien Folgendes hinzu.
.rspec
--format documentation
Wenn Sie das oben Gesagte hinzufügen, wird das Testergebnis auf leicht lesbare Weise ausgegeben. Sie können sich vorstellen, dass Sie den Kontext schreiben und dass er später in Phasen herauskommt. Nun, ich denke nicht, dass es ein Problem ohne es ist. Übrigens, wenn Sie andere als die oben genannten Optionen hinzufügen, können Sie auch Text ausgeben und parallel anzeigen. Wenn Sie ihn also haben möchten, überprüfen Sie ihn bitte.
Die Installation ist vorerst abgeschlossen. Es ist die Arbeit, den Testcode von hier aus zu schreiben.
RSpec kann durch Eingabe eines Befehls im Terminal ausgeführt werden. Ich habe noch keinen Testcode geschrieben, aber ich werde den folgenden Code in das Terminal eingeben, um zu sehen, ob er tatsächlich funktioniert.
Terminal
$ bundle exec rspec
Das Obige ist der Befehl zum Ausführen des Tests. Daher ist es in Ordnung, wenn die folgende Anzeige angezeigt wird.
Terminal
No examples found.
Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures
Erstellen Sie von hier aus Testdateien wie Modelle, Controller, Roots und Ansichten und schreiben Sie Testcode.
Ziel ist es, Testcode für die Modellvalidierung zu schreiben und auszuführen, bei der es sich um einen Komponententest handelt.
Der Testcode erstellt eine Spezifikationsdatei und schreibt sie. Anstatt eine Datei zu erstellen und zu schreiben, platzieren Sie die Spezifikationsdatei zum besseren Verständnis unter spec / models / für die Modelltestdatei und unter spec / controller / für die Controller-Testdatei. Ich werde.
*** Namenskonvention für Spezifikationsdateien *** Die Spezifikationsdatei heißt die entsprechende Klasse name_spec.rb. Dieses Mal testen wir die Validierung des Kontaktformulars (Kontaktmodell / contact.rb), sodass der Name "contact_spec.rb" lautet.
Nachdem Sie die Datei zum Schreiben des Testcodes kennen, schreiben Sie den Super-Super-Super-Basic-Testcode, bevor Sie ihn tatsächlich schreiben. *** Einfacher Testcode "Stellen Sie sicher, dass 1 + 1 zu 2 wird" ***
sample_spec.rb
describe "hogehoge" do
it "1 +1 wird 2" do
expect(1 + 1).to eq 2
end
end
Ignoriere den Wortschatz und gib meinen eigenen Kommentar ab.
sample_spec.rb
describe "hogehoge" do #describe(Bedeutung zu erklären)Erstellen Sie eine Gruppe für diesen Test.
it "1 +1 wird 2" do #it "~~~"machen~~~Schreiben Sie im Teil, welchen Test dieser Code durchführt
expect(1 + 1).to eq 2 #Dieser Teil ist die Formel, die prüft, ob der Test tatsächlich erfolgreich ist.
end
end
Die Formel der obigen Erwartung (1 + 1) zu Gleichung 2 heißt Erwartung. ● expect(X).to eq Y Wenn der Wert des Ausdrucks im x-Teil gleich dem Wert im Y-Teil ist, ist der Test erfolgreich. Der eq-Teil wird als Matcher bezeichnet.
Ein Matcher ist eine Bedingung, unter der ein Test in einer Spekulation erfolgreich ist. Wie oben erwähnt, bedeutet Gleichung beispielsweise "wenn gleich". Es gibt mehrere andere Matcher, z. B. include (falls enthalten) und valid (falls validiert). Es gibt viele, also verwenden Sie es bitte entsprechend dem Test, den Sie schreiben möchten.
Das diesmal verwendete Kontaktmodell (Abfragefunktion) ist wie folgt.
contact.rb
class Contact < ApplicationRecord
#Name des Absenders
validates :name, presence: true
#Mead, um auf Anfragen zu antworten
validates :email, presence: true, length: {maximum:255},
format: {with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i}
#Anfrage Betreff
validates :title, presence: true
#Inhalt der Anfrage
validates :message, presence: true
end
Wir werden Testcode für die obige Validierung schreiben.
Bearbeiten Sie die erstellte contact_spec.rb wie folgt.
contact_spec.rb
require 'rails_helper'
RSpec.describe Contact, type: :model do
it "Ohne Namen kann nicht registriert werden" do
end
end
Die erste Zeile require'rails_helper 'aktiviert allgemeine Einstellungen, indem Sie die Beschreibung in rails_helper.rb lesen. Diese Beschreibung in der ersten Zeile wird jedes Mal in jede Spezifikationsdatei geschrieben.
Führen Sie nach dem Schreiben das Befehlspaket exec rspec im Terminal aus. Ich habe noch keinen Ausdruck geschrieben, der als Test ausgewertet wird, daher besteht der Test bedingungslos. Es ist in Ordnung, wenn es wie folgt aussieht.
Terminal
Terminal
Contact
Ohne Namen kann nicht registriert werden
Finished in 0.23784 seconds (files took 4.71 seconds to load)
1 example, 0 failures
Fügen Sie dem zuvor geschriebenen Testcode Folgendes hinzu.
contact_spec.rb
RSpec.describe Contact, type: :model do
it "Ohne Namen kann nicht registriert werden" do
contact = Contact.new(name: "", email: "[email protected]", title: "Über Rücksendungen", message: "Ich möchte den Artikel mit der Bestellnummer 000000000 zurücksenden.")
contact.valid?
expect(contact.errors[:name]).to include("Bitte eingeben")
end
end
*** [3. Zeile] Erstellen Sie eine neue Instanz der Kontaktklasse mit der Eigenschaft, in der Sie testen möchten ***. Ich möchte einen Testcode erstellen, um zu bestätigen, dass "nicht registriert werden kann, wenn der Name leer ist". Daher erstelle ich eine Instanz der Kontaktklasse mit dem Wert des Namens leer und anderen entsprechend festgelegten Werten.
*** [6. Zeile] Überprüfen Sie, ob die in *** erstellte Instanz nicht durch Validierung gespeichert werden kann.
Überprüfen Sie als Ergebnis der Überprüfung mit *** [7. Zeile] ***, ob die Fehleranweisung der Instanz Ihren Erwartungen entspricht. Wenn Sie den Spaltennamen in der Methode zum Abrufen des Hashwerts für contact.errors angeben, können Sie das Array abrufen, das die durch diese Spalte verursachte Fehleranweisung enthält. Zu diesem Zweck erstellen wir eine Ausnahme mit einem Matcher namens include. Dieses Mal wird "Bitte eingeben" in der Validierungsfehleranweisung ausgegeben, sodass der Inhalt beschrieben wird.
Der obige Ablauf hat dieselbe Bedeutung wie die Überprüfung auf der Konsole unten.
Terminal
#Starten Sie die Konsole
$ rails c
#Erstellen Sie eine Instanz der Kontaktklasse mit einem leeren Namenswert
>contact = Contact.new(name: "", email: "[email protected]", title: "Über Rücksendungen", message: "Ich möchte den Artikel mit der Bestellnummer 000000000 zurücksenden.")
#valid?Verwenden Sie die Methode
>contact.valid?
#Verwenden Sie die Fehlermethode
>contact.errors
=> #<ActiveModel::Errors:0x007ffa6ce07ef0
@base=
#<Contact:0x007ffa6d3430b8
#Unterlassung
@messages={:name=>["Bitte eingeben"]}>
Geben Sie nun den Befehl RSpec ein, um den Test auszuführen.
Terminal
$ bundle exec rspec
Wenn Sie das folgende Ergebnis erhalten, sind Sie erfolgreich.
Terminal
Contact
Ohne Namen kann nicht registriert werden
Finished in 0.07346 seconds (files took 2.31 seconds to load)
1 example, 0 failures
Wenn ein Fehler angezeigt wird, wird im Terminal eine Fehlermeldung angezeigt, die häufig durch sorgfältiges Lesen behoben werden kann. Wie oben erwähnt, wird sich Ihr Verständnis ein wenig vertiefen, wenn Sie es einmal als eine Reihe von Flows auf der Konsole überprüfen.
Ich habe früher einen Testcode geschrieben, aber wenn ich einen Test für eine andere E-Mail als den Namen schreibe, sieht dieser wie folgt aus.
contact_spec.rb
RSpec.describe Contact, type: :model do
it "Ohne Namen kann nicht registriert werden" do
contact = Contact.new(name: "", email: "[email protected]", title: "Über Rücksendungen", message: "Ich möchte den Artikel mit der Bestellnummer 000000000 zurücksenden.")
contact.valid?
expect(contact.errors[:name]).to include("Bitte eingeben")
end
it "Ohne E-Mail kann nicht registriert werden" do
contact = Contact.new(name: "takashi", email: "", title: "Über Rücksendungen", message: "Ich möchte den Artikel mit der Bestellnummer 000000000 zurücksenden.")
contact.valid?
expect(contact.errors[:email]).to include("Bitte eingeben")
end
end
Ich entleere einfach den E-Mail-Teil, aber das Erstellen einer Instanz erhöht jedes Mal die Codemenge. *** factory_bot *** verbessert dies.
Ein Juwel, mit dem Sie einfach Dummy-Instanzen erstellen können. Legen Sie die für jede Klasseninstanz definierten Eigenschaften im Voraus in einer anderen Datei fest und verwenden Sie die Methode aus der Spezifikationsdatei, um die genaue Instanz zu erstellen.
Wenn Sie factory_bot verwenden, lautet die Beschreibung wie folgt.
contact_spec.rb
RSpec.describe Contact, type: :model do
it "Ohne Namen kann nicht registriert werden" do
contact = build(:contact, name: "")
contact.valid?
expect(contact.errors[:name]).to include("Bitte eingeben")
end
it "Ohne E-Mail kann nicht registriert werden" do
contact = build(:contact, email: "")
contact.valid?
expect(contact.errors[:email]).to include("Bitte eingeben")
end
end
Eine Instanz wird im Voraus in einer separaten Datei erstellt und aufgerufen.
*** Gem'factory_bot_rails '*** wurde derselben Umgebung wie rspec-Rails hinzugefügt
Gemfile
group :development, :test do
#Kürzung
gem 'rspec-rails'
gem 'factory_bot_rails'
end
Dann Bundle installieren und Erstellen Sie ein Verzeichnis mit dem Namen "Fabriken" direkt unter dem Spezifikationsverzeichnis. Erstellen Sie darin eine Ruby-Datei mit dem Plural-Dateinamen der erstellten Instanz. In diesem Fall ist es contacts.rb.
Bearbeiten Sie die erstellte Datei contacts.rb wie folgt.
contacts.rb
FactoryBot.define do
factory :contact do
name {"takashi"}
email {"[email protected]"}
title {"Über Rücksendungen"}
message {"Ich möchte den Artikel mit der Bestellnummer 000000000 zurücksenden."}
end
end
Wenn Sie dann eine Instanz erstellen, können Sie eine Instanz mit dem Inhalt der festgelegten Vorlage erstellen, indem Sie Folgendes schreiben.
#factory_Wenn Sie keinen Bot verwenden
contact = Contact.new(name: "", email: "[email protected]", title: "Über Rücksendungen", message: "Ich möchte den Artikel mit der Bestellnummer 000000000 zurücksenden.")
#factory_Bei Verwendung von Bot
contact = FactoryBot.build(:contact)
Es war ziemlich erfrischend. Wenn Sie spec / rails_helper.rb wie folgt bearbeiten, können Sie auch die Beschreibung von FactoryBot der Klasse, die der Empfänger ist, weglassen.
rails_helper.rb
RSpec.configure do |config|
#Folgende Beschreibung wurde hinzugefügt
config.include FactoryBot::Syntax::Methods
#Kürzung
end
Basierend auf dem oben Gesagten werde ich zusätzlichen Testcode schreiben.
contact_spec.rb
require 'rails_helper'
RSpec.describe Contact, type: :model do
it "Ohne Namen kann nicht registriert werden" do
contact = build(:contact, name: "")
contact.valid?
expect(contact.errors[:name]).to include("Bitte eingeben")
end
it "Ohne E-Mail kann nicht registriert werden" do
contact = build(:contact, email: "")
contact.valid?
expect(contact.errors[:email]).to include("Bitte eingeben")
end
it "@Domain nach der Marke" do
contact = build(:contact, email: "example@eee")
contact.valid?
expect(contact.errors[:email]).to include("Ist ein ungültiger Wert")
end
it "Ohne Titel kann nicht registriert werden" do
contact = build(:contact, title: "")
contact.valid?
expect(contact.errors[:title]).to include("Bitte eingeben")
end
it "Ohne Nachricht kann nicht registriert werden" do
contact = build(:contact, message: "")
contact.valid?
expect(contact.errors[:message]).to include("Bitte eingeben")
end
end
Dies ist vorerst das ausgefüllte Formular.
Dieses Mal haben wir einen Test zur Validierung des Kontaktmodells durchgeführt. Abhängig von den Spezifikationen der WEB-Anwendung gibt es jedoch verschiedene Möglichkeiten, es zu schreiben. Ich hoffe, es hilft Ihnen, die Welt des Testens so gut wie möglich zu verstehen. Es scheint, dass die Methode zum Testen des Controllers anders sein wird, daher hoffe ich, sie bald zu verbessern.
Als ich den Test ein wenig verstand, kam mir der Gedanke, dass ich bei der Entwicklung der nächsten Anwendung den Testcode schreiben und dann implementieren möchte. Wir würden uns freuen, wenn Sie Korrekturen oder Korrekturen am Inhalt des Artikels kommentieren könnten.
Vielen Dank für das Lesen für eine lange Zeit!
Recommended Posts