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.
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.
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