建立家长和儿童与儿童存在验证工厂女孩(Create Parent and Child with ch

2019-09-29 17:25发布

有有许多旅行发票的项目。 新的故事来到我的方式,要求发票必须有一个行程。 我添加了一个验证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)}

Answer 1:

before的回调可能会帮助你。

从文档 :

前(:创建) - 工厂被保存(通过FactoryGirl.create)之前调用

它是这样的:

before(:create) { |object| object.details << build(:invoice_detail)}


文章来源: Create Parent and Child with child presence validation Factory Girl