FactoryGirl-将has_many记录添加到工厂

时间:2017-05-15 23:52:10

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

使用FactoryGirl我知道我可以制作这样的奇异属性:

FactoryGirl.define do
  factory :company do
    trading_name { FFaker::Company.name }
    legal_type { legal_types.keys.sample }
    updated_by { FactoryGirl.create(:user) }
    ...

现在我正在尝试添加用户,但不知道该怎么做。

我试过了:

users { FactoryGirl.create(:user) }

each循环出错,因为users不是用户集合,而是更改为单个用户。

那么如何在工厂中创建has_many个对象?你如何确保他们彼此联系?有些人会after(:create),但我想在保存Company记录之前建立用户。

1 个答案:

答案 0 :(得分:1)

Factory Girl文档的

Association section表示要使用after(:create)。在您的情况下代码将是:

FactoryGirl.define do
  factory :company do
    ...

    after(:create) do |company|
      create_list(:user, 3, company: company)
    end

更新:如果您在after_save模型中进行了User验证,则可以使用after(:build)挂钩代替after(:create)

    after(:build) do |company|
      company.users << build(:user)
    end