Как передать параметры через цепочку ассоциаций в 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 23

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)