Как передать аргумент для метода FactoryGirl
Существует следующий код для создания объектов:
FactoryGirl.define do
factory :user do
name 'Some name'
phone '89277777777'
address 'Some address'
end
factory :order do
title 'Some title'
end
end
Пользовательская модель получила has_many :orders
ассоциация, и можно ли пройти user
фабрика для order
завод?
Заранее спасибо.
2 ответа
Да, так:
FactoryGirl.define do
factory :user do
name 'Some name'
phone '89277777777'
address 'Some address'
end
factory :order do
user
title 'Some title'
end
end
В ваших спецификациях:
FactoryGirl.create(:order)
создаст как объект заказа, так и связанный объект пользователя.
больше информации о FactoryGirl с Rails - https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md
Да, решение так же просто, как использование метода ассоциации
factory :order do
title 'Some title'
association :user
end
это может быть сокращено до
factory :order do
title 'Some title'
user
end
Слово предупреждения. Этот подход обычно делает ваше приложение очень медленным, пока увеличивается сложность ваших моделей.
На самом деле, если у вас есть покупка, связанная с заказом, связанным с пользователем, и т. Д., То создание Покупки создаст на каскаде все связанные записи, даже если они вам не нужны. Ваши тесты со временем станут медленнее.
Я предлагаю вам использовать эти черты, чтобы составлять свои ассоциации только при необходимости.
factory :order do
title 'Some title'
trait :with_user do
user
end
end
FactoryGirl.create(:order, :with_user)
Я обычно тоже использую :with_fake_user
когда мне нужно, чтобы идентификатор пользователя присутствовал для проверки, но я тестирую то, что не требует доступа к пользователю.
factory :order do
title 'Some title'
trait :with_user do
user
end
trait :with_fake_user do
user_id 0
end
end
FactoryGirl.create(:order, :with_user)
FactoryGirl.create(:order, :with_fake_user)