如何为具有最小关联记录验证能力的模型创建FactoryBot工厂?

时间:2019-03-27 20:00:11

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

我有一个仅在至少有一个地址时有效的用户模型:

class User
  has_many :addresses
  validates :addresses, length: { miniumum: 1}
end

class Address
  belongs_to :user
end

我试图这样定义FactoryBot工厂:

FactoryBot.define do
  factory :user do
    association :address
    name 'test'
  end
end

使用create(:user)创建用户时,由于错误的地址而导致无法保存用户的错误。似乎仅在创建用户之后创建关联(显然会创建验证错误)。建立我的工厂的正确方法是什么?

谢谢

2 个答案:

答案 0 :(得分:0)

尝试:

FactoryBot.define do
  factory :user do
    name 'test'

    before(:create) do |user|
      user.addresses << build(:address, user: user)
    end
  end
end

请记住也为address创建一个工厂。

答案 1 :(得分:0)

association属性,仅在模型包含外键(在其上声明了belongs_to的模型)时才应使用。从您的工厂中删除association :address并使用before(:create)回调在保存用户之前建立地址:

FactoryBot.define do
  factory :user do
    name 'test'
    before(:create) { |object| object.addresses.build() }
  end
end