Mettendo da parte gli argomenti sull'esistenza o meno dell'esistenza delle associazioni di un modello, ho un modello chiamato Order
e sto verificando che abbia almeno uno item
in la sua associazione con has_many
:Convalida che A has_many Association abbia almeno un modello quando si usa FactoryGirl
class Order < ActiveRecord::Base
has_many :items
validates :items, presence: true
end
ho impostato factorygirl a Lint miei fabbriche (verifica di validità). Quindi la mia fabbrica di ordini non è valida a meno che non crei un articolo per la sua collezione has_many
.
mia fabbrica orders
si presenta così:
FactoryGirl.define do
factory :order do
ignore do
items_count 1
end
after(:build) do |order, evaluator|
create_list(:item, evaluator.items_count, order: order)
end
end
end
Secondo di Factory Girl Per iniziare:
FactoryGirl.lint builds each factory and subsequently calls #valid? on it
Tuttavia quando ho eseguito le mie specifiche, Factory Girl lancia un FactoryGirl::InvalidFactoryError
perché la fabbrica ordine è invalido.
Soluzione
after(:build) do |order, evaluator|
evaluator.items_count.times do
order.items << FactoryGirl.create(:item)
end
#create_list(:item, evaluator.items_count, order: order)
end
stai facendo un 'create_list (: l'articolo)', hai 'definito item' fabbrica? – vee
Sì. La fabbrica dell'articolo è lì ed è valida. – Undistraction
Penso che dovresti usare 'after (: create)' invece di 'after (: build)' per questo perché con la semplice build l''ordine' non viene salvato e non c'è 'order_id' per' items'. – vee