Я новичок в FactoryGirl, и я пробую следующий простой сценарий?Factory Girl создает связь с существующим объектом
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 имеет Assocation belongs_to
Gender
класс и правила проверки, который говорит, что gender_id
должен присутствовать. У меня также есть проверка на класс Gender
для уникальности кода.
На create(:papas)
выше утверждение, в моем тесте, я получаю ошибку, что Customer
, который будет создан не является допустимым, поскольку gender_id
является nil
.
Если удалить :strategy => :build
на Customer
:papas
фабрики ассоциации с полом, то я получаю сообщение об ошибке, что при попытке создать :papas
, код для пола уже существует.
Что мне нужно сделать, чтобы мои тесты отображали данные, как требуется выше?
Обратите внимание, что я хочу, чтобы гендерные группы были созданы без клиентов, а также в других тестах. Не говорите мне, чтобы создавать клиентов с помощью команд создания фабрики и позволять клиентам создавать полы в одно и то же время. Это не сработает, если я попытаюсь создать двух клиентов одного пола.
Кроме того, там должен быть лучший ответ, чем один:
@male = create(:male)
@female = create(:female)
create(:papas, :gender => @male)
create(:dumas, :gender => @female)
(.? При использовании приборов эти вещи были готовы вне коробки Должен ли я вернуться обратно к светильникам)
Хотя довольно громоздким против светильников, ваш ответ является правильным. Я использую заводскую девушку последние два месяца, и все же мой следующий проект будет с светильниками! –
Преимущество, которое вы можете найти на фабриках, - это если вам нужно создать множество разных клиентов. У вас может быть фабрика male_customer и female_customer и использовать ее в качестве родительских фабрик для ваших разных клиентов, что значительно снижает значимость. Рад, что это сработало! – Shadwell