まず、この質問は意見に迷惑をかけるかもしれませんが、質問するのは貴重な質問だと思います。私は不在管理と追跡を扱う私のアプリケーションのための非常に具体的な例を与えるでしょう。RSpecを使用してRailsで複雑な関係をテストするにはどうすればよいですか?
Account
は、多くはUsers
であり、User
は多くがAbsences
です。 Account
はPublicHolidays
を作成することができます。これは、Absence
が使用する日数を計算する際に無視する必要があります。
例:人は週を脱ぐ場合は、使用日は、当時の一つがPublicHoliday
ある場合は、使用日は、私は、このような、そのメソッドを実装したい4.
だろう5.なりますPublicHoliday
が作成された場合、作成日より前に作成されたAbsences
に使用され、PublicHoliday
の日付をまたぐ日数が再計算されます。 absence
はそう私が開始する1日を計算するためにそれを期待して、私は後に使用するとph
が同じ日付で、この試験では
it 'triggers a recalculation of absence days on create for absences created before the date of creation of the public holiday' do
robin = FactoryGirl.create(:robin)
absence = FactoryGirl.create(:basic_absence, user: robin)
expect(absence.days_used).to eq(1)
ph = FactoryGirl.create(:public_holiday, country: "England", account: robin.account)
expect(absence.reload.days_used).to eq(0)
end
:
私の現在のRSpecのテストでは、このようになります使用された日を再計算するコールバックを作成します。
このテストは正しい方法ですか?多くの関連オブジェクトを作成せずに効率的な方法がありますか?
私の前提は、ユーザーが休暇(祝日を含む)がなくなるたびに、新しい休務記録が作成されることです。あなたがdays_used = absences - holidaysと言ったので、休暇モデルではなく、代わりにUserモデルの一部として 'days_used'メソッドを置く方が良いでしょうか?私は何かを誤解しない限り、@ absence.days_usedの代わりに@ user.days_usedのようなことをすると思います。 –
ユーザーモデルでdays_usedと同様の方法があります。不在が何日使用されているか、論理がかなり複雑なので、私はそれを動かしたくありません。 –
明示的に日付を 'ph = FactoryGirl.create(:public_holiday、country:" England "、account:robin.account、created_at:absence.created_at)'と明記するのとは別に、(また、真夜中にテストが失敗しないでください)、私はそのテストが健全だと思います。 –