Haben Sie ein Projekt, das Rechnungen mit vielen Reisen hat. Neue Geschichte kam auf meine Art und verlangte, dass eine Rechnung eine Reise MUSS. Ich habe eine Validierung hinzugefügt , aber es ist jetzt eine Reihe meiner Tests in die Luft gehen, da FactoryGirl versucht, die Rechnung vor dem Erstellen der zugehörigen Reise zu speichern.Erstellen Sie Eltern und Kind mit Kind Anwesenheit Validierung Factory Girl
FactoryGirl.define do
factory :invoice do
sequence(:invoice_id) { SecureRandom.uuid}
merchant
amount 100.00
item_count 1
paid false
currency "GBP"
invoice_type "pre-flight"
service_rendered false
cancelled false
after(:create) { |object| create(:trip, invoice_id: object.invoice_id)}
end
end
Was kann ich tun, um diese Objekte zu erstellen. Vorzugsweise auf der Werksebene, da es zahlreiche Tests gibt, die dieses Verhalten nutzen (und derzeit aufgrund dessen versagen). This scheint eine gute Lösung auf der Teststufe zu sein.
Update Immer noch kämpfen mit meinen Tests grün jetzt. 42 Tests sind mit dem folgenden Code fehlgeschlagen.
Validierung fehlgeschlagen: Reisen kann nicht leer sein
Meine gegenwärtige aktualisierte Zeile in meinem Code factory
before(:create) { |object| object << build(:trip, invoice_id: object.invoice_id)}
Hier ist auch meine Reise Fabrik.
FactoryGirl.define do
factory :trip do
depart_airport "MCI"
arrive_airport "ORD"
passenger_first_name "Joe"
passenger_last_name "Business"
passenger_count 1
departure_date {10.days.from_now}
invoice
end
end
Jetzt @andrykonchin Arbeiten richtig war. Ich hatte etwas in meinem before(:create)...
before(:create) { |object| object.trips << build(:trip, invoice_id: object.invoice_id)}
Wäre es möglich, ein Kind mit der Eltern-ID zu erstellen, BEVOR der Elternteil erstellt wird? – CheeseFry
@CheesFry, können Sie, aber Fremdschlüssel Einschränkungen in einer Datenbank wird es verhindern. Sie sollten * create * nicht erstellen, Sie müssen nur ein Kindmodell * erstellen * und es der Assoziation (Elternmodell) hinzufügen; Wenn Sie das Elternmodell (Rechnung) speichern, wird auch das neue Kindmodell gespeichert, wie in meinem Beispiel, oder? – andrykonchin
Ich habe meinen obigen Code aktualisiert, der es funktioniert hat. Danke für dein Beispiel! – CheeseFry