Создание родительских и дочерних элементов с проверкой присутствия на заводе Factory Girl
Есть проект, который имеет счета со многими поездками. Моя история пришла с просьбой, чтобы Счет-фактура ДОЛЖЕН был совершить поездку. Я добавил валидацию validates :trips, presence: true
но сейчас он взрывает ряд моих тестов, поскольку FactoryGirl пытается сохранить счет-фактуру перед созданием связанной поездки.
FactoryGirl.define do
factory :invoice do
sequence(:invoice_id) { SecureRandom.uuid}
merchant
amount 100.00
item_count 1
paid false
currency "GBP"
invoice_type "pre-flight"
service_rendered false
cancelled false
after(:create) { |object| create(:trip, invoice_id: object.invoice_id)}
end
end
Что я могу сделать, чтобы создать эти объекты. Желательно на заводском уровне, так как существует множество тестов, использующих это поведение (и в настоящее время терпящих неудачу из-за него.) Это кажется хорошим решением на уровне тестирования.
Обновление Все еще борется с получением моих тестов зеленым теперь. 42 Тесты с ошибкой со следующим кодом.
Проверка не удалась: поездки не могут быть пустыми
Моя текущая обновленная строка в моем коде FactoryGirl
before(:create) { |object| object << build(:trip, invoice_id: object.invoice_id)}
Вот и моя поездка на фабрику.
FactoryGirl.define do
factory :trip do
depart_airport "MCI"
arrive_airport "ORD"
passenger_first_name "Joe"
passenger_last_name "Business"
passenger_count 1
departure_date {10.days.from_now}
invoice
end
end
Работая сейчас@andrykonchin был прав. Я что-то пропустил в своем before(:create)...
before(:create) { |object| object.trips << build(:trip, invoice_id: object.invoice_id)}
1 ответ
before
Обратный звонок может помочь вам.
Из документации:
before (: create) - вызывается перед сохранением фабрики (через FactoryGirl.create)
Это будет выглядеть так:
before(:create) { |object| object.details << build(:invoice_detail)}