instance method
perform_enqueued_jobs
Ruby on Rails 7.2.3
Since v4.2.9Signature
perform_enqueued_jobs(only: nil, except: nil, queue: nil, at: nil, &block)
Performs all enqueued jobs. If a block is given, performs all of the jobs that were enqueued throughout the duration of the block. If a block is not given, performs all of the enqueued jobs up to this point in the test.
def test_perform_enqueued_jobs
perform_enqueued_jobs do
MyJob.perform_later(1, 2, 3)
end
assert_performed_jobs 1
end
def test_perform_enqueued_jobs_without_block
MyJob.perform_later(1, 2, 3)
perform_enqueued_jobs
assert_performed_jobs 1
end
This method also supports filtering. If the :only option is specified, then only the listed job(s) will be performed.
def test_perform_enqueued_jobs_with_only
perform_enqueued_jobs(only: MyJob) do
MyJob.perform_later(1, 2, 3) # will be performed
HelloJob.perform_later(1, 2, 3) # will not be performed
end
assert_performed_jobs 1
end
Also if the :except option is specified, then the job(s) except specific class will be performed.
def test_perform_enqueued_jobs_with_except
perform_enqueued_jobs(except: HelloJob) do
MyJob.perform_later(1, 2, 3) # will be performed
HelloJob.perform_later(1, 2, 3) # will not be performed
end
assert_performed_jobs 1
end
:only and :except options accept Class, Array of Class, or Proc. When passed a Proc, an instance of the job will be passed as argument.
If the :queue option is specified, then only the job(s) enqueued to a specific queue will be performed.
def test_perform_enqueued_jobs_with_queue
perform_enqueued_jobs queue: :some_queue do
MyJob.set(queue: :some_queue).perform_later(1, 2, 3) # will be performed
HelloJob.set(queue: :other_queue).perform_later(1, 2, 3) # will not be performed
end
assert_performed_jobs 1
end
If the :at option is specified, then only jobs that have been enqueued to run at or before the given time will be performed. This includes jobs that have been enqueued without a time.
If queue_adapter_for_test is overridden to return a different adapter, perform_enqueued_jobs will merely execute the block.
Parameters
-
onlykey = nil -
exceptkey = nil -
queuekey = nil -
atkey = nil -
blockblock
Source
# File activejob/lib/active_job/test_helper.rb, line 620
def perform_enqueued_jobs(only: nil, except: nil, queue: nil, at: nil, &block)
unless block_given?
require_active_job_test_adapter!("perform_enqueued_jobs (without a block)")
return flush_enqueued_jobs(only: only, except: except, queue: queue, at: at)
end
return _assert_nothing_raised_or_warn("perform_enqueued_jobs", &block) unless using_test_adapter?
validate_option(only: only, except: except)
old_perform_enqueued_jobs = queue_adapter.perform_enqueued_jobs
old_perform_enqueued_at_jobs = queue_adapter.perform_enqueued_at_jobs
old_filter = queue_adapter.filter
old_reject = queue_adapter.reject
old_queue = queue_adapter.queue
old_at = queue_adapter.at
begin
queue_adapter.perform_enqueued_jobs = true
queue_adapter.perform_enqueued_at_jobs = true
queue_adapter.filter = only
queue_adapter.reject = except
queue_adapter.queue = queue
queue_adapter.at = at
_assert_nothing_raised_or_warn("perform_enqueued_jobs", &block)
ensure
queue_adapter.perform_enqueued_jobs = old_perform_enqueued_jobs
queue_adapter.perform_enqueued_at_jobs = old_perform_enqueued_at_jobs
queue_adapter.filter = old_filter
queue_adapter.reject = old_reject
queue_adapter.queue = old_queue
queue_adapter.at = old_at
end
end
Defined in activejob/lib/active_job/test_helper.rb line 620
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveJob::TestHelper