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

Joa*_*urg 23 ruby ruby-on-rails 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)
Run Code Online (Sandbox Code Playgroud)

我想做的是打电话给工厂Factory(:post, user: current_user),然后current_user一直通过协会到帐户工厂.有没有办法这样做?

Jac*_*own 23

不确定您使用的是什么版本的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)
Run Code Online (Sandbox Code Playgroud)

  • 对于FactoryGirl的最新版本,使用`transient`而不是`ignore` (6认同)
  • 我希望我2年前找到了这个. (3认同)