[RUBY] [RSpec] Unit Test (mit gem: factory_bot)

RSpec eingeführt

Achten Sie darauf, die Webkonsole nicht zu duplizieren

Gemfile


gem 'rspec-rails'

group :development do
  gem 'web-console'
end

Nach Bundle Install`` Rails g rspec: install

Bearbeiten Sie die .rspec-Datei, um sie in einem einfach zu lesenden Format wie folgt anzuzeigen:

.rspec


--format documentation

Lassen Sie uns an dieser Stelle überprüfen, ob RSpec ordnungsgemäß funktioniert. bundle exec rspec

Terminal


Wenn es normal funktioniert, wird es so sein
No examples found.


Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures

Zu erstellende Datei

.rspec spec spec/spec_helper.rb Wie rails_helper.rb ist es eine Datei, die allgemeine Einstellungen für RSpec schreibt, dies wird jedoch verwendet, wenn RSpec ohne Rails verwendet wird.

spec/rails_helper.rb Dies ist eine Datei zum Schreiben allgemeiner Einstellungen bei Verwendung von RSpec in Rails. Wenden Sie allgemeine Einstellungen und Methoden an, indem Sie diese Datei in jeder Testdatei lesen

Factory_bot_rails eingeführt

Gemfile


group :development, :test do
  #Kürzung
  gem 'rspec-rails'
  gem 'factory_bot_rails'
end

** Erstelle Datei ** Erstellen Sie eine Ruby-Datei mit dem Plural-Dateinamen der erstellten Instanz Diesmal erstellt, damit es zu spec / factories / users.eb wird.

** Datei bearbeiten ** Erleichtern Sie das Erstellen einer Instanz oder das Speichern in der Datenbank mithilfe einer bestimmten Methode in der Spezifikationsdatei

user.rb


FactoryBot.define do

  factory :user do
    nickname              {"abe"}
    email                 {"[email protected]"}
    password              {"00000000"}
    password_confirmation {"00000000"}
  end

end

grundlegende Methode factory_bot

** Erstellungsmethode ** Erstellen Sie eine Instanz des Klassennamens als Symboltyp als Argument basierend auf der Beschreibung von factory_bot

Beispiel


#factory_Wenn Sie keinen Bot verwenden
user = User.new(nickname: "abe", email: "[email protected]", password: "00000000", password_confirmation: "00000000")
#factory_Bei Verwendung von Bot
user = FactoryBot.build(:user)

** Methode erstellen ** Es funktioniert fast genauso wie Build, aber beim Erstellen wird der Wert in der Test-DB gespeichert. Der Test wird einmal ausgeführt und der Inhalt der Test-DB wird bei jedem Abschluss zurückgesetzt.

Beispiel


#Die erstellte Instanz wird in der DB gespeichert
user = FactoryBot.create(:user)

Weglassen der factory_bot-Notation

Wenn Sie eine Instanz mit factory_bot erstellen, können Sie die Beschreibung von FactoryBot der Klasse, die der Empfänger ist, weglassen.

rails_helper.rb


#Kürzung
RSpec.configure do |config|
  #Folgende Beschreibung wurde hinzugefügt
  config.include FactoryBot::Syntax::Methods

  #Kürzung

end

Schreiben Sie einen Testcode für das Modell

Testcode für "Benutzermodell" ** Erstellen einer Spezifikationsdatei ** Dateinamenskonvention entsprechende Klassenname_spec.rb

Erstellen Sie es so, dass es zu spec / models / user_spec.rb wird.

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("can't be blank")
    end
  end
end

Codebeschreibung

describe beschreiben erstellt unmittelbar nach dem Ende eine Reihe von Tests. Schreiben Sie in das "", das auf die Beschreibung folgt, eine Beschreibung der Gruppe.

** es und Beispiel ** Es stellt eine Reihe von funktionierenden Testcodes dar, die als Beispiel bezeichnet werden. Schreiben Sie eine Beschreibung des Beispiels in das darauf folgende "".

** Erwartung ** Es ist die Formel, die tatsächlich ausgewertet wird. Schreiben Sie dazwischen. In der obigen Formel ist der Teil "erwarten (user.errors [: nickname]). Einschließen (" kann nicht leer sein ")" die Erwartung.

** Matcher ** Zeigt die Bedingungen an, unter denen der Test die Erwartung erfüllt.

Methode

valid? Aktivieren Sie "Befindet es sich in einem Zustand, in dem es aufgrund einer Validierung nicht gespeichert werden kann?" Der Rückgabewert der Methode ist true / false

errors Wenn Sie die Fehlermethode für eine Instanz verwenden, die die gültige? -Methode verwendet, überprüfen Sie, warum sie nicht gespeichert werden kann, wenn sie aufgrund der Validierung nicht gespeichert werden kann.

Matcher

include Sie können überprüfen, ob der als Argument verwendete Wert in dem Array enthalten ist, das das erwartete Argument ist Doppeltes Muster: wurde bereits aufgenommen Leeres Muster: darf nicht leer sein Unzureichendes Zeichenmuster: ist zu kurz Muster mit zu vielen Zeichen: ist zu lang

be_valid Es wird übergeben, wenn die als Argument der Erwartung festgelegte Instanz alle Validierungen löscht. Beispiel unten

sample_spec.rb


it "Kann registriert werden, wenn der Spitzname 6 Zeichen oder weniger beträgt" do
  user = build(:user, nickname: "aaaaaa")
  expect(user).to be_valid
end

eq Wenn sie gleich sind, werden sie bestehen. Beispiel unten

sample_spec.rb


describe "sum" do
  it "1 +1 wird 2" do
    expect(1 + 1).to eq 2
  end
end

Recommended Posts

[RSpec] Unit Test (mit gem: factory_bot)
Unit-Test der Architektur mit ArchUnit
[Rails / RSpec] Schreiben Sie einen Modelltest (mit Shoulda Matchers / FactoryBot)
Ich habe einen Unit-Test der Rails-Anwendung mit RSpec und FactoryBot versucht
Bild-Upload mit CarrierWave ~ Rspec-Test ~
[Rails5] Rspec -Einheitentest beim Verschachteln-
Über App-Tests RSpec (Unit Test)
[Schienen] Machen wir einen Unit-Test mit Rspec!
Jsons Anfrage im Unit Test des Controllers mit MockMvc
[Schienen] Von der Testvorbereitung zum Modelleinheitentest [RSpec]
Ausführung des RSpec-Testcodes
So führen Sie mit RxAndroid einen Komponententest mit JVM an einer Quelle durch
Verfahren zur Erstellung des RSpec-Unit-Testcodes (Login User Creation Ver.)
Java Unit Test Library-Arterien-Probe
[Schienen] Test mit RSpec
Testen Sie Nokogiri mit Rspec.
Machen Sie einen Unit-Test mit Junit.
Dynamisches Schreiben iterativer Testfälle mit test / unit (Test :: Unit)
[RSpec] Verwenden Sie WebMock, um die Logik mithilfe einer externen API zu testen
Erstellen Sie mehrere Instanzen zusammen aus FactoryBot mit RSpec mithilfe von create_list
[RSpec] Verwenden wir FactoryBot [Rails]
[IntelliJ IDEA] Unit-Test durchführen
Testen Sie Active Strage mit RSpec
Einführung in Micronaut 2 ~ Unit Test ~
Logisches Löschen mit Gem Paranoia
Testen Sie den GraphQL-Resolver mit rspec
[Rails] Informationen zum Rspec-Antworttest
[Ruby On Rails] Bei der Durchführung eines Modell-Unit-Tests mit RSpec mit FactoryBot tritt ein Fehler auf, da der externe Schlüssel nicht eingegeben wurde.