拥有一个包含许多旅行的发票的项目。我的新故事要求发票必须旅行。我已经添加了验证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
我该怎么做才能创建这些对象。最好是在工厂级别,因为有许多测试利用这种行为(目前因此而失败。)This似乎是测试级别的一个很好的解决方案。
更新 现在还在努力让我的测试变绿。 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)}
答案 0 :(得分:1)
before
回调可能会对您有所帮助。
before(:create) - 在保存工厂之前调用(通过 FactoryGirl.create)
看起来像这样:
before(:create) { |object| object.details << build(:invoice_detail)}