Odkładając na bok argumenty dotyczące tego, czy należy testować istnienie asocjacji modelu, mam model o nazwie Order
i potwierdzam, że ma on co najmniej jeden item
w jego has_many
stowarzyszenie przy użyciu:Sprawdzanie, czy stowarzyszenie ma wiele ma co najmniej jeden model przy użyciu FactoryGirl
class Order < ActiveRecord::Base
has_many :items
validates :items, presence: true
end
mam ustawiony FactoryGirl na sobie włókna swoje fabryki (sprawdzanie ważności). Tak więc moja fabryka zamówień jest nieważna, chyba że utworzę element dla jego kolekcji has_many
.
Moja orders
fabryka wygląda następująco:
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
Według Dziewczyna z fabryki na Rozpoczęcie:
FactoryGirl.lint builds each factory and subsequently calls #valid? on it
Jednak gdy uruchamiam moje specyfikacje, Dziewczyna z fabryki zgłasza FactoryGirl::InvalidFactoryError
ponieważ fabrykę zamówienie jest nieważny.
Obejście
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
Robisz 'create_list (: pozycja)', masz 'item' fabrycznie zdefiniowane? – vee
Tak. Fabryka przedmiotu jest tam i jest ważna. – Undistraction
Myślę, że powinieneś używać 'after (: create)' zamiast 'after (: build)', ponieważ przy samej kompilacji 'order' nie jest zapisywany i nie ma' order_id' dla 'items'. – vee