Как передать параметры через цепочку ассоциаций в FactoryGirl
По умолчанию FactoryGirl вызывает фабрики ассоциаций для их создания. Я могу передать ассоциацию для фабрики в качестве параметра. Но как я могу передать объект, который должен использоваться глубоко в цепи ассоциаций?
Например:
У меня есть пост, который имеет PostsManager, который имеет учетную запись, которая принадлежит к функции current_user.
Когда я делаю 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(:post, user: current_user)
, а затем пройти current_user
весь путь через ассоциации к фабрике счетов. Есть ли способ сделать это так?1 ответ:
Не уверен, какую версию FactoryGirl вы используете, но если вы находитесь на любой последней версии (2.6+), вы можете использовать переходные атрибуты (Подробнее читайте на странице "Начало работы" ). Вы могли бы сделать что-то вроде этого:
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)