Как создать фабрику FactoryBot для модели, которая имеет проверку на минимальное количество связанных записей? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть модель User, которая действительна только при наличии хотя бы одного адреса:

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 голосов
/ 27 марта 2019
Атрибут

association, должен использоваться только в том случае, если модель содержит внешний ключ (модель, которую вы объявили belongs_to).Удалите association :address с вашего завода и используйте before(:create) обратный вызов для создания адресов перед сохранением пользователя:

FactoryBot.define do
  factory :user do
    name 'test'
    before(:create) { |object| object.addresses.build() }
  end
end
0 голосов
/ 27 марта 2019

Попробуйте:

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

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

Пожалуйста, не забудьте также создать фабрику для address.

...