多くの旅行を伴う請求書を持つプロジェクトを持っています。請求書に旅行が必要であることを要請する新しい話が私のところに来ました。私は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)}
で
私の現在の更新の行はここでも私の旅の工場で空白にすることはできません。今 @andrykonchinは正しかったの作業
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
。私はあなたを助けるかもしれない、私のbefore(:create)...
before(:create) { |object| object.trips << build(:trip, invoice_id: object.invoice_id)}
親が作成される前に親のIDを持つ子を作成することは可能でしょうか? – CheeseFry
@CheeseFryでも可能ですが、データベース内の外部キーの制約がそれを防止します。あなたは*作成するべきではありません*、子モデルを構築して(親モデル)の関連付けに追加するだけです。親モデル(請求書)を保存すると、私の例のように、新しい子モデルも保存されますか? – andrykonchin
上記のコードを更新しています。あなたの例をありがとう! – CheeseFry