我想了解什么格式:at
为ActiveJob
是,这样我就可以使用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
参数,我宁愿用它代替块中最后两行。问题是,tomorrow
变量似乎是在不同的格式:at
,这使得这个失败:
tomorrow = 1.day.from_now.to_date
assert_enqueued_with(job: ActionMailer::DeliveryJob, at: tomorrow) do
onboarding.start_onboarding
end
与此错误:
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
你想在'Float'比较,基本上是有很多缺点的下沉我怀疑一个例子。我强烈建议坚持你现在拥有的东西,因为比较'日期'对于测试目的来说更强大,然后比较_milliseconds_。 OTOH,':at'参数可能是'tomorrow'之前的任何内容,所以可以使用'Date.tomorrow.noon'等,如[Rails docs]中所示(http://api.rubyonrails.org/classes/ActiveJob /TestHelper.html#method-i-assert_enqueued_with)。 – mudasobwa
你能告诉我'start_onboarding'如何排队工作吗 – Anthony
@Anony'start_onboarding'只是一个来自AASM gem的事件调用,但我添加了实际安排邮件的方法 –