Factory Girl создает ассоциацию с существующим объектом

Я новичок в FactoryGirl и пробую следующий простой сценарий?

factory :female, :class => Gender do
  code 'Female'
end

factory :male, :class => Gender do
  code 'Male'
end

factory :papas, :class => Customer do
  first_name 'Jim'
  last_name 'Papas'
  association :gender, :factory => :male, :strategy => :build
end

factory :dumas, :class => Customer do
  first_name 'Mary'
  last_name 'Dumas'
  association :gender, :factory => :female, :strategy => :build
end

Затем в моем тесте:

 create(:male)
 create(:female)
 create(:papas)
 create(:dumas)

Обратите внимание, что класс Customer имеет класс ассоциации own_toGender и правило проверки, которое говорит, что должен присутствовать gender_id . У меня также есть проверка класса Genderна уникальность кода.

В операторе create(:papas)выше в моем тесте я получаю сообщение об ошибке, что Customer, который будет создан, недействителен, потому что гендерный_ид равно nil.

Если я уберу :strategy => :buildна Customer:papasсвязь factory с полом, то я получу ошибку, что при попытке создать :papas, код пола уже существует.

Что мне нужно сделать, чтобы мои тесты создавали данные, как указано выше?

Обратите внимание, что я хочу, чтобы гендеры создавались без клиентов и в других тестах. Не говорите мне создавать клиентов с помощью команд factory create и позволять клиентам одновременно создавать пол. Это не сработает, если я попытаюсь создать двух клиентов одного пола.

Кроме того, должен быть лучший ответ, чем тот:

@male = create(:male)
@female = create(:female)
create(:papas, :gender => @male)
create(:dumas, :gender => @female)

(При использовании фикстур эти вещи были готовы из коробки. Вернуться к фикстурам?)

11
задан theUtherSide 30 September 2017 в 01:55
поделиться