FactoryGirl vor(:schaffen) callback nicht das anlegen von Verbänden
Ich habe eine FactoryGirl Werk, das schafft eine Order
aber die vor(:schaffen) callback nicht erstellen die zugehörigen factory-Objekt:
Übergeordneten Klasse
class Order < ActiveRecord::Base
attr_accessible :tax, :total
has_many :order_lines
validates :user, presence: true
validates :order_lines , presence: true
end
Kind-Klasse
class OrderLine < ActiveRecord::Base
attr_accessible :order, :product, :qty
belongs_to :order
belongs_to :product
...
...
validates :order, presence: true
end
Fabrik
Factory :order do
...
ignore do
number_or_order_lines 1
end
before(:create) do |order, evaluator|
FactoryGirl.create_list :order_line, evaluator.number_or_order_lines, order: order
end
end
Factory :order_line do
association :user
association :order
...
end
PROBLEM
In meinem rspec testen, wenn ich ein order-Objekt:
describe Order do
before {@order = FactoryGirl.create(:order) } => #throws error (see below)
end
FEHLER
ActiveRecord::RecordInvalid
Die Validierung fehlgeschlagen ist, Um Linien können nicht leer sein
UPDATE
Kann ich jedoch erfolgreich tun, die folgenden aber offensichtlich nur erreicht, erstellen eine:
after(:build) do |order, evaluator|
order.order_lines << FactoryGirl.build(:order_line, order: order)
end
Hypothese - ich kann sehen, wo die create_list
versuchen könnten, speichern Sie die OrderLine
die einen Fehler verursachen, da die Eltern noch nicht gespeichert wurde - aber ich weiß nicht, ob es die noch gibt eine OrderLine-Objekt, das nur in einem ungültigen Zustand und damit die order_lines Sammlung auf das order-Objekt sollte noch nicht leer sein.
- Versuchen Sie es mit nach(:build) statt vorher(:schaffen)
- Die Aktualisierung das problem mit neuen Informationen - ich habe versucht, das nach(:build) als auch die Verwendung von build_list statt create_list. Leider der einzige Weg, es funktioniert, wenn die Validierung für order_lines auf das Modell.
- Ich bin mit dem gleichen Problem
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie benötigen, um Ihre OrderLine Fabrik in der Reihenfolge aufnehmen, wie dies