[RUBY] [RSpec] Verwenden wir FactoryBot [Rails]

Was ist Factory Bot? ??

Dies und das von Factory Bot

Wenn Sie factory_bot_rails installieren, können Sie mit dem folgenden Befehl eine Datei erstellen, um factory zu erstellen.

bin/rails g factory_bot:model task

Ich werde ein wenig erklären.

Bis zu "bin / schienen g" sollte in Ordnung sein. Erscheint explizit im Modell mit factory_bot: model. Bitte geben Sie das Ziel wie "Aufgabe" an.

Wenn Sie diesen Befehl ausführen, sollte in spec / factories / task.rb eine Datei wie die folgende angezeigt werden.

spec/factories/tasks.rb


FactoryBot.define do

  factory :task do

  end
end

Sie haben eine Vorlage. Definieren wir die Daten darin.

spec/factories/tasks.rb


FactoryBot.define do

  factory :task do
    name "Einkaufen"
    content "Geh und kauf ein Abendessen"
  end
end

Es kann weniger sein, aber es sollte in Ordnung sein. Durch Ausführen von "FactoryBot.create (: task)" in der Testdatei können Sie die in "spec / factories / task.rb" beschriebenen Daten erstellen.

Verwenden Sie FactoryBot ein wenig.

Überschreiben

Wenn Sie beispielsweise einen abnormalen Test schreiben möchten, der einen Fehler ausgibt, wenn "Name" von "Aufgabe" "Null" ist, können Sie wie folgt schreiben.

spec/models/task_spec.rb


#Ungültig, wenn kein Name vorhanden ist.
it "is invalid without a name" do
  task = FactoryBot.build(:task, name: nil)
  task.valid?
  expect(task.errors[:name]).to include("can't be blank")
end

Durch Überschreiben der Eigenschaft auf "Null" sieht es wie erwartet aus.

Behandeln Sie eindeutige Werte.

Zum Beispiel sollte der Mead eindeutig sein, eine solche Spezifikation haben und Sie sollten einen solchen Test schreiben. FactoryBot bezieht sich jedoch immer auf denselben Wert, sodass es möglicherweise nicht möglich ist, ein solches Ereignis zu behandeln.

Dieses Problem kann mit ** Sequenz ** wie unten gezeigt gelöst werden.

spec/factories/users.rb


FactoryBot.define do

  factory :user do
    name "Yamada"
    sequence(:email) { |n| "test#{n}@example.com" }
  end
end

Wenn Sie es so definieren, wird es als "test1 @ example.com", "test2 @ example.com" festgelegt.

Sehr angenehm.

Recommended Posts

[RSpec] Verwenden wir FactoryBot [Rails]
[Schienen] Machen wir einen Unit-Test mit Rspec!
Verwenden wir jcmd
Rspec Basics [Rails]
[Rails5] Rspec -validierung-
[Rails] Verwenden Sie jQuery
[Schienen] Test mit RSpec
Verwenden Sie Webmock mit Rspec
Verwenden Sie Bilder mit Schienen
Schienen, RSpec-Installationsverfahren
[Swift] Verwenden wir die Erweiterung
[Rails / RSpec] Schreiben Sie einen Modelltest (mit Shoulda Matchers / FactoryBot)
Ich habe einen Unit-Test der Rails-Anwendung mit RSpec und FactoryBot versucht
[Rails] Verwendung von Enum
[RSpec] Lassen Sie uns Factory Bot meistern
[Swift] Verwenden wir die segmentierte Steuerung
[Rails] Verwendung von Enum
[spring] Verwenden wir Spring Data JPA
Verwendung von Rails Join
[Rails] Testcode mit Rspec
Verwenden Sie mit Rails 6.0 mehrere Datenbanken
[Rails] Verwendung der Validierung
[Rails] Informationen zum Rspec-Antworttest
[Rails] So verwenden Sie authenticate_user!
Verwenden Sie mehrere Kontrollkästchen in Rails6!
[Docker] Wird immer mit Docker + Rails verwendet
[Schienen] Verwendung von Scope
[Rails] Wie man Edelstein "devise" benutzt
[Rails] Verwendung von Flash-Nachrichten
Verwenden wir Set more [Collections Framework]
Rails Buchbesprechung App RSpec Einführung
Verwendung von Ruby on Rails
Verwenden wir Twilio in Java! (Einführung)
Verwenden wir Reflection Private Method Access
[Rails] Verwenden Sie Cookies im API-Modus
Verwenden wir es, nachdem wir sudo verstanden haben!
[Rails5] Rspec -Einheitentest beim Verschachteln-
[Rails] Verwendung von Active Storage
[Einführung in Rails] Verwendung von Render
[RSpec] Unit Test (mit gem: factory_bot)
[Für Rails-Anfänger] Zusammenfassung der Verwendung von RSpec (Überblick)