如何通过FactoryGirl中的关联链传递参数

时间:2013-07-10 13:18:25

标签: ruby-on-rails ruby factory-bot

默认情况下,FactoryGirl会调用关联的工厂来创建它们。我可以将工厂的关联作为参数传递。但是,如何传递一个应该在关联链中深入使用的对象?

例如:

我有一个Post,它有一个PostsManager,它有一个Account,属于current_user。

当我执行Factory(:post)时,它会创建一个PostsManager,它创建一个不属于(存根)current_user的帐户。

因此,在使用Post工厂的规范中,我必须这样做:

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 个答案:

答案 0 :(得分:23)

不确定您使用的是什么版本的FactoryGirl,但如果您使用的是最新版本(2.6+),则可以使用瞬态属性(在"Getting Started" page上阅读更多内容)。你可以这样做:

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)