[RUBY] [Schienen] Von der Testvorbereitung zum Modelleinheitentest [RSpec]

Einführung

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.

RSpec eingeführt

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.

Beschreibung des Testcodes

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.

ff85d977fcb5b51a8144d55c95468715.png [1] Hier wird eine Instanz des Post-Modells (leere Inhaltsspalte) erstellt. 3ce62d1bbec5ec9557a79f44cbc6ab93.png [2] Wenn die oben erstellte Instanz nicht gespeichert werden kann, wird false zurückgegeben. Weitere Informationen zu gültigen und ungültigen Methoden finden Sie unter [hier](https://railsguides.jp/active_record_validations.html#valid-questionmark% E3% 81% A8 ungültiges Fragezeichen). 67d49b9cce2dfa00427194114ba6a853.png [3] Die Fehleranweisung kann mit der Fehlermethode angezeigt werden. Ich erhalte eine Fehlermeldung unter "@ message". Dieses Mal verfügt das Post-Modell zusätzlich zu der Validierung, die den Himmel nicht zulässt, über eine Validierung von mindestens 2 Zeichen, sodass diese beiden Fehler angezeigt werden.

Nützliches Werkzeug (FactoryBot)

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.

Führen Sie den Test aus

Sie müssen lediglich einen Befehl vom Terminal aus eingeben, um den Test auszuführen.

Terminal


$ bundle exec rspec  
fd3dba157c0da00633c15f6a630b06f2.png 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.

Führen Sie den Test durch Angabe der Datei aus

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

[Schienen] Von der Testvorbereitung zum Modelleinheitentest [RSpec]
[Rspec] Ablauf von der Einführung von Rspec bis zum Schreiben von Unit-Test-Code für das Modell
[Rails5] Rspec -Einheitentest beim Verschachteln-
Über App-Tests RSpec (Unit Test)
[Schienen] Machen wir einen Unit-Test mit Rspec!
[Rails] Unit-Testcode für das Benutzermodell
[Ruby on Rails] Modelltest mit RSpec
[Schienen] Test mit RSpec
[Rails / RSpec] Schreiben Sie einen Modelltest (mit Shoulda Matchers / FactoryBot)
Einführung in Micronaut 2 ~ Unit Test ~
[Rails] Testcode mit Rspec
[Rails] Informationen zum Rspec-Antworttest
Ich habe einen Unit-Test der Rails-Anwendung mit RSpec und FactoryBot versucht
[Rails] Integrationstest mit Capybara (von der Einführung bis zur einfachen Testausführung)
[Challenge CircleCI von 0] Erstellen Sie einen automatisierten Test (Rails6.0, mysql8.0, Rspec)
So führen Sie einen Komponententest für Spring AOP durch
[R Spec on Rails] So schreiben Sie Testcode für Anfänger von Anfängern
Hinweise zum Generieren von Dummy-Daten für Kennwörter im Unit-Testcode des Rails-Modells
[RSpec] Unit Test (mit gem: factory_bot)
Vom Ziehen des Docker-Images der Schienen bis zum Starten
Führen Sie RSpec ein und schreiben Sie den Unit-Test-Code
[Ruby on Rails] Test mit RSpec anzeigen
[Rails] Wie man von erb zu haml konvertiert
Java Artery - Einfach zu verwendende Unit-Test-Bibliothek
Ich möchte einen Unit Test schreiben!
[Ruby on Rails] Controller-Test mit RSpec
[Rails] Zuweisen von Variablen vom Controller zu JavaScript
Nach der Einführung von RSpec schreiben Sie den Unit-Test-Code für das Modell
[Rails] Ich möchte mit RSpec testen. Wir unterstützen Ihren Schritt [Einführungsverfahren]
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
So verknüpfen Sie Rails6 Vue (aus dem Umgebungsbau)
Rails Tutorial Kapitel 1 Von Null bis Bereitstellung [Try]
[Rails] So implementieren Sie einen Unit-Test eines Modells
Einführung in Rspec, ein Testframework für Ruby on Rails
Ich möchte mit Firestore von Rails spielen
Rails-Anfänger haben versucht, mit RSpec zu beginnen
[Rails] Einführung von pay.jp (von der Ansichtsanpassung bis zur Registrierung)