Как передать параметры через цепочку ассоциаций в FactoryGirl
По умолчанию FactoryGirl вызывает фабрики ассоциаций для их создания. Я могу передать ассоциацию для параметра factory в качестве параметра. Но как я могу передать объект, который должен использоваться глубоко в цепочке ассоциаций?
Например:
У меня есть сообщение, у которого есть PostsManager, у которого есть учетная запись, принадлежащая current_user.
Когда я делаю a Factory(:post)
, он создает PostsManager, который создает учетную запись, которая не принадлежит к текущему_узлу (stubed).
Итак, в спецификациях, которые используют Post factory, я должен сделать:
account = Factory(:account, user: current_user)
post_manager = Factory(:post_manager, account: account)
post = Factory(:post, post_manager: post_manager)
Я хотел бы сделать вызов factory с помощью Factory(:post, user: current_user)
, а затем передать current_user
полностью через ассоциации в учетную запись factory. Есть ли способ сделать это так?
Ответы
Ответ 1
Не знаете, какую версию FactoryGirl вы используете, но если вы используете последнюю версию (2.6+), вы можете использовать Transient Attributes (подробнее читайте на странице "Начало работы" ). Вы можете сделать что-то вроде этого:
FactoryGirl.define do
factory :post do
ignore do
user nil
end
posts_manager { FactoryGirl.build(:posts_manager, :user => user) }
end
factory :posts_manager do
ignore do
user nil
end
account { FactoryGirl.build(:account, :user => user) }
end
factory :account do
user { user }
end
end
FactoryGirl.create(:post, :user => current_user)