Rails cung cấp ActiveJob::TestHelper với matchers tích hợp.
ruby
RSpec.describe PostsController, type: :request do
include ActiveJob::TestHelper
it "enqueues a welcome email after user creation" do
expect {
post "/users", params: { user: { email: "test@example.com" } }
}.to have_enqueued_job(WelcomeEmailJob)
.with(instance_of(Integer))
.on_queue("default")
end
endDùng perform_enqueued_jobs để flush queue ngay trong test.
Để test job perform trực tiếp, gọi described_class.perform_now(id) và assert side-effect (mail gửi, record thay đổi, v.v.).
Rails provides ActiveJob::TestHelper with built-in matchers.
ruby
RSpec.describe PostsController, type: :request do
include ActiveJob::TestHelper
it "enqueues a welcome email after user creation" do
expect {
post "/users", params: { user: { email: "test@example.com" } }
}.to have_enqueued_job(WelcomeEmailJob)
.with(instance_of(Integer))
.on_queue("default")
end
endUse perform_enqueued_jobs to flush the queue immediately in a test.
To test job execution directly, call described_class.perform_now(id) and assert the side-effect (mail sent, record changed, etc.).