如何在 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
已更改,无论如何。
主要的是,我们不是检查作业是否已排队和故事结束,而是从该作业中寻找期望的结果 运行。
最近在我当前的项目中,我注意到在我们的集成测试中,有很多 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
已更改,无论如何。
主要的是,我们不是检查作业是否已排队和故事结束,而是从该作业中寻找期望的结果 运行。