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

How can I test `perform_now` job in Rails

最近在我当前的项目中,我注意到在我们的集成测试中,有很多 assert_enqueued_jobs 1 代码被注释掉了,然后我问了其他开发人员,他告诉我我们已经改变了很多 ActiveJob perform_later 出于速度原因调用 perform_now,并且 assert_enqueued_jobs 无法捕获那些现在执行的作业。

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

任何人都可以给我见解或建议来测试它吗?还是无法测试?

无法测试?从来没有!

assert_enqueded_jobs 实际上并不是在测试代码,而是在检查某些事情是否确实已排队等待稍后发生。如果事情马上发生,为什么要测试它是否已入队?

我会尝试保留队列并强制作业 performed/cleared 使用其他 ActiveJob::TestHelpers。但对我来说,这没什么区别。

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

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

可能正在创建一个 Notification 并且您可能想断言 Notification.count 已更改,无论如何。

主要的是,我们不是检查作业是否已排队和故事结束,而是从该作业中寻找期望的结果 运行。