ActiveJob
の形式は:at
ですので、assert_enqueued_with
と:at
のパラメータを使用できます。 ActiveJobの形式は:
tomorrow = 1.day.from_now.to_date
assert_enqueued_with(job: ActionMailer::DeliveryJob) do
onboarding.start_onboarding
job_date = ActiveJob::Base.queue_adapter.enqueued_jobs[0][:at]
assert_equal tomorrow, Time.at(job_date).to_date
end
をしかし、私はassert_enqueued_with
が:at
パラメータを持っており、私が代わりにブロック内の最後の2行で、それを使用することを好むだろうと気付きました。このエラーで
tomorrow = 1.day.from_now.to_date
assert_enqueued_with(job: ActionMailer::DeliveryJob, at: tomorrow) do
onboarding.start_onboarding
end
:問題はtomorrow
変数が、これは失敗します:at
とは異なる形式であると思われる、あるあなたが見ることができるように、
Minitest::Assertion: No enqueued job found with {:job=>ActionMailer::DeliveryJob, :at=>Wed, 31 May 2017 13:12:05 UTC +00:00}
tomorrow
が日付で、Wed, 31 May 2017
を言います、job_date
は何種類かの大きな数字です(例:1496236366.183789
)。したがって私はtomorrow
を同じ形式に変換しようとしています。
本当にこの点で助けていただければ幸いです。おそらく私は:at
を間違って使用していますか、または:at
の形式を知っていて、tomorrow
の変換に役立ちます。
start_onboarding
は、電子メールの配信をスケジュールするために、このメソッドを呼び出すだけでAASMイベント、(プライバシーの理由のために修飾ビット)である:
def notify(id)
person = User.find(id)
PersonMailer.onboarding_reminder(person).
deliver_later(wait_until: 1.day.from_now)
end
の例を参照してください。 'Date'sをテスト目的のためにもっと堅牢にしてから、_milliseconds_を比較するので、現在持っているものに固執することを強くお勧めします。 OTOHの場合、 ':at'パラメータは' tomorrow'の前にあるかもしれないので、[Rails docs](http://api.rubyonrails.org/classes/ActiveJob)に示されているように 'Date.tomorrow.noon'などを使うかもしれません。 /TestHelper.html#method-i-assert_enqueued_with)。 – mudasobwa
'start_onboarding'がジョブをエンキューする方法を教えてください – Anthony
@Anthony' start_onboarding'はAASM gemからのイベントコールですが、実際にメーラーをスケジュールするメソッドを追加しました –