Strategia budowania FactoryGirl z asocjacją has_many
Biorąc pod uwagę standardowy związek has_many między dwoma obiektami. Dla prostego przykładu przejdźmy do:
class Order < ActiveRecord::Base
has_many :line_items
end
class LineItem < ActiveRecord::Base
belongs_to :order
end
To, co chciałbym zrobić, to wygenerować zlecenie typu stubbed z listą elementów zamówienia typu stubbed.
FactoryGirl.define do
factory :line_item do
name 'An Item'
quantity 1
end
end
FactoryGirl.define do
factory :order do
ignore do
line_items_count 1
end
after(:stub) do |order, evaluator|
order.line_items = build_stubbed_list(:line_item, evaluator.line_items_count, :order => order)
end
end
end
Powyższy kod nie działa, ponieważ Railsy chcą wywołać zapisywanie w kolejności, gdy przypisane są elementy line_item, a FactoryGirl zgłosi wyjątek:RuntimeError: stubbed models are not allowed to access the database
Jak więc (lub czy jest to możliwe) wygenerować obiekt stubbed, w którym kolekcja has_may jest również zaśmiecona?