Подтвердить что ты не робот

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

4b9b3361

Ответ 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)