【问题标题】:FactoryGirl—Add a has_many record to a factoryFactoryGirl - 将 has_many 记录添加到工厂
【发布时间】:2017-05-15 23:52:10
【问题描述】:

使用 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记录之前让用户。

【问题讨论】:

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


    【解决方案1】:

    Factory Girl 文档的Association section 说要使用after(:create)。在您的情况下,代码将是:

    FactoryGirl.define do
      factory :company do
        ...
    
        after(:create) do |company|
          create_list(:user, 3, company: company)
        end
    

    更新:如果您在User 模型中有after_save 验证,您可以使用after(:build) 挂钩而不是after(:create)

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

    【讨论】:

    • 我的问题是Company 模型有一个需要user 存在的after_save 回调。模型的回调在工厂回调之前触发。
    • 我已经在答案中添加了这个案例的描述,请检查一下。
    • 您需要声明build(:user, company: company),还是自动添加到company.users
    • Rails 会自动将company_id 设置为user
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多