[RUBY] [Ralis] Über Unit Test

Zunaechst

Ich werde ein Memorandum über das Verfahren aufbewahren, wenn ich einen Komponententest zur Modellvalidierung mit Rspc durchführe.

Was ist Rspec

Ein typisches Testwerkzeug für Ruby and Rails, ein Juwel, das zum Testen auf Klassen- oder Methodenbasis verwendet wird.

Umgebung

・ Schienen 5.0.7.2 ・ Ruby 2.5.1 ・ Rspec-Schienen 3.9.0 ・ Factory_bot_rails 5.1.1

Vorbereitungen

1. Einführung von rspec und Factory_bot gem

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

2. Erstellen Sie eine rspec-Datei und überprüfen Sie den Betrieb

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.

Testprozedur

1. Fügen Sie einen Fabrikordner direkt unter dem Verzeichnis rspec hinzu und erstellen Sie darin eine Datei users.rb

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.

2 Testbeschreibung hinzugefügt

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.

Verweise

・ Https://programming-beginner-zeroichi.jp/articles/61 ・ Https://www.sejuku.net/blog/47847 ・ Htps: // Diese m / shojikishindoi / n / n 5019bc64c254

Recommended Posts

[Ralis] Über Unit Test
Java Unit Test mit Mockito
Über App-Tests RSpec (Unit Test)
Über =
Komponententest unter Active Storage-Installationsumgebung