如何在Rails中测试`perform_now`作业

时间:2017-05-17 03:00:42

标签: ruby-on-rails minitest rails-activejob

最近在我当前的项目中,我注意到在我们的集成测试中,有许多assert_enqueued_jobs 1代码被注释掉,然后我向其他开发人员询问它,他告诉我,我们已经改变了很多< strong> ActiveJob perform_later因速度原因致电perform_nowassert_enqueued_jobs无法抓住现在执行的作业。

我也尝试过使用assert_performed_jobs,但没有成功。

任何人都可以给我一些见解或建议来测试吗?或者它是不可测试的?

1 个答案:

答案 0 :(得分:2)

不可测?从未!

assert_enqueded_jobs实际上并没有测试代码,而是检查某些内容实际上是否会在以后发生。如果事情立即发生,为什么要测试它是否排队?

我会尝试保留队列并强制使用其他ActiveJob::TestHelpers执行/清除作业。但就我而言,它没什么区别。

https://apidock.com/rails/v4.2.1/ActiveJob/TestHelper/assert_enqueued_jobs

说你的工作是发送一些电子邮件,只需致电ActiveJob#perform_now并查看ActionMailer::Base.deliveries.count。在这一点上,实际测试将非常适合这项工作。

可能正在创建Notification,您可能希望声明Notification.count已更改,无论如何。

主要的是,我们不是检查作业是否已入队并且结束了故事,而是在寻找工作中所需的结果。