未验证 提交 2b594b06 编写于 作者: J Jeremy Daer 提交者: GitHub

Merge pull request #33635 from bogdanvlviv/improve-active_job-test_helpers

Improve Active Job test helpers
* Allow `assert_performed_with` to be called without a block.
*bogdanvlviv*
* Execution of `assert_performed_jobs`, and `assert_no_performed_jobs`
without a block should respect passed `:except`, `:only`, and `:queue` options.
*bogdanvlviv*
* Allow `:queue` option to job assertions and helpers.
*bogdanvlviv*
* Allow `perform_enqueued_jobs` to be called without a block.
Performs all of the jobs that have been enqueued up to this point in the test.
......@@ -11,19 +24,6 @@
*Zach Kemp*
* Allow `queue` option to `assert_no_enqueued_jobs`.
Example:
```
def test_no_logging
assert_no_enqueued_jobs queue: 'default' do
LoggingJob.set(queue: :some_queue).perform_later
end
end
```
*bogdanvlviv*
* Allow call `assert_enqueued_with` with no block.
Example:
......
......@@ -12,7 +12,7 @@ module QueueAdapters
#
# Rails.application.config.active_job.queue_adapter = :test
class TestAdapter
attr_accessor(:perform_enqueued_jobs, :perform_enqueued_at_jobs, :filter, :reject)
attr_accessor(:perform_enqueued_jobs, :perform_enqueued_at_jobs, :filter, :reject, :queue)
attr_writer(:enqueued_jobs, :performed_jobs)
# Provides a store of all the enqueued jobs with the TestAdapter so you can check them.
......@@ -54,12 +54,20 @@ def perform_or_enqueue(perform, job, job_data)
end
def filtered?(job)
filtered_queue?(job) || filtered_job_class?(job)
end
def filtered_queue?(job)
if queue
job.queue_name != queue.to_s
end
end
def filtered_job_class?(job)
if filter
!Array(filter).include?(job.class)
elsif reject
Array(reject).include?(job.class)
else
false
end
end
end
......
......@@ -52,7 +52,7 @@ def after_teardown # :nodoc:
queue_adapter_changed_jobs.each { |klass| klass.disable_test_adapter }
end
# Specifies the queue adapter to use with all active job test helpers.
# Specifies the queue adapter to use with all Active Job test helpers.
#
# Returns an instance of the queue adapter and defaults to
# <tt>ActiveJob::QueueAdapters::TestAdapter</tt>.
......@@ -118,13 +118,17 @@ def queue_adapter_for_test
def assert_enqueued_jobs(number, only: nil, except: nil, queue: nil)
if block_given?
original_count = enqueued_jobs_with(only: only, except: except, queue: queue)
yield
new_count = enqueued_jobs_with(only: only, except: except, queue: queue)
assert_equal number, new_count - original_count, "#{number} jobs expected, but #{new_count - original_count} were enqueued"
actual_count = new_count - original_count
else
actual_count = enqueued_jobs_with(only: only, except: except, queue: queue)
assert_equal number, actual_count, "#{number} jobs expected, but #{actual_count} were enqueued"
end
assert_equal number, actual_count, "#{number} jobs expected, but #{actual_count} were enqueued"
end
# Asserts that no jobs have been enqueued.
......@@ -176,7 +180,7 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# Asserts that the number of performed jobs matches the given number.
# If no block is passed, <tt>perform_enqueued_jobs</tt>
# must be called around the job call.
# must be called around or after the job call.
#
# def test_jobs
# assert_performed_jobs 0
......@@ -186,10 +190,11 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# assert_performed_jobs 1
#
# perform_enqueued_jobs do
# HelloJob.perform_later('yves')
# assert_performed_jobs 2
# end
# HelloJob.perform_later('yves')
#
# perform_enqueued_jobs
#
# assert_performed_jobs 2
# end
#
# If a block is passed, that block should cause the specified number of
......@@ -206,7 +211,7 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# end
#
# The block form supports filtering. If the :only option is specified,
# This method also supports filtering. If the +:only+ option is specified,
# then only the listed job(s) will be performed.
#
# def test_hello_job
......@@ -216,7 +221,7 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# end
#
# Also if the :except option is specified,
# Also if the +:except+ option is specified,
# then the job(s) except specific class will be performed.
#
# def test_hello_job
......@@ -237,17 +242,30 @@ def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block)
# end
# end
# end
def assert_performed_jobs(number, only: nil, except: nil)
#
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will be performed.
#
# def test_assert_performed_jobs_with_queue_option
# assert_performed_jobs 1, queue: :some_queue do
# HelloJob.set(queue: :some_queue).perform_later("jeremy")
# HelloJob.set(queue: :other_queue).perform_later("bogdan")
# end
# end
def assert_performed_jobs(number, only: nil, except: nil, queue: nil, &block)
if block_given?
original_count = performed_jobs.size
perform_enqueued_jobs(only: only, except: except) { yield }
perform_enqueued_jobs(only: only, except: except, queue: queue, &block)
new_count = performed_jobs.size
assert_equal number, new_count - original_count,
"#{number} jobs expected, but #{new_count - original_count} were performed"
performed_jobs_size = new_count - original_count
else
performed_jobs_size = performed_jobs.size
assert_equal number, performed_jobs_size, "#{number} jobs expected, but #{performed_jobs_size} were performed"
performed_jobs_size = performed_jobs_with(only: only, except: except, queue: queue)
end
assert_equal number, performed_jobs_size, "#{number} jobs expected, but #{performed_jobs_size} were performed"
end
# Asserts that no jobs have been performed.
......@@ -269,7 +287,7 @@ def assert_performed_jobs(number, only: nil, except: nil)
# end
# end
#
# The block form supports filtering. If the :only option is specified,
# The block form supports filtering. If the +:only+ option is specified,
# then only the listed job(s) will not be performed.
#
# def test_no_logging
......@@ -278,7 +296,7 @@ def assert_performed_jobs(number, only: nil, except: nil)
# end
# end
#
# Also if the :except option is specified,
# Also if the +:except+ option is specified,
# then the job(s) except specific class will not be performed.
#
# def test_no_logging
......@@ -287,11 +305,20 @@ def assert_performed_jobs(number, only: nil, except: nil)
# end
# end
#
# If the +:queue+ option is specified,
# then only the job(s) enqueued to a specific queue will not be performed.
#
# def test_assert_no_performed_jobs_with_queue_option
# assert_no_performed_jobs queue: :some_queue do
# HelloJob.set(queue: :other_queue).perform_later("jeremy")
# end
# end
#
# Note: This assertion is simply a shortcut for:
#
# assert_performed_jobs 0, &block
def assert_no_performed_jobs(only: nil, except: nil, &block)
assert_performed_jobs 0, only: only, except: except, &block
def assert_no_performed_jobs(only: nil, except: nil, queue: nil, &block)
assert_performed_jobs 0, only: only, except: except, queue: queue, &block
end
# Asserts that the job has been enqueued with the given arguments.
......@@ -338,7 +365,25 @@ def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
instantiate_job(matching_job)
end
# Asserts that the job passed in the block has been performed with the given arguments.
# Asserts that the job has been performed with the given arguments.
#
# def test_assert_performed_with
# MyJob.perform_later(1,2,3)
#
# perform_enqueued_jobs
#
# assert_performed_with(job: MyJob, args: [1,2,3], queue: 'high')
#
# MyJob.set(wait_until: Date.tomorrow.noon).perform_later
#
# perform_enqueued_jobs
#
# assert_performed_with(job: MyJob, at: Date.tomorrow.noon)
# end
#
# If a block is passed, that block performs all of the jobs that were
# enqueued throughout the duration of the block and asserts that
# the job has been performed with the given arguments in the block.
#
# def test_assert_performed_with
# assert_performed_with(job: MyJob, args: [1,2,3], queue: 'high') do
......@@ -349,15 +394,24 @@ def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
# MyJob.set(wait_until: Date.tomorrow.noon).perform_later
# end
# end
def assert_performed_with(job: nil, args: nil, at: nil, queue: nil)
original_performed_jobs_count = performed_jobs.count
def assert_performed_with(job: nil, args: nil, at: nil, queue: nil, &block)
expected = { job: job, args: args, at: at, queue: queue }.compact
serialized_args = serialize_args_for_assertion(expected)
perform_enqueued_jobs { yield }
in_block_jobs = performed_jobs.drop(original_performed_jobs_count)
matching_job = in_block_jobs.find do |in_block_job|
serialized_args.all? { |key, value| value == in_block_job[key] }
if block_given?
original_performed_jobs_count = performed_jobs.count
perform_enqueued_jobs(&block)
jobs = performed_jobs.drop(original_performed_jobs_count)
else
jobs = performed_jobs
end
matching_job = jobs.find do |performed_job|
serialized_args.all? { |key, value| value == performed_job[key] }
end
assert matching_job, "No performed job found with #{expected}"
instantiate_job(matching_job)
end
......@@ -403,25 +457,42 @@ def assert_performed_with(job: nil, args: nil, at: nil, queue: nil)
# assert_performed_jobs 1
# end
#
def perform_enqueued_jobs(only: nil, except: nil)
# 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
#
def perform_enqueued_jobs(only: nil, except: nil, queue: nil)
return flush_enqueued_jobs(only: only, except: except, queue: queue) unless block_given?
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
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
block_given? ? yield : flush_enqueued_jobs(only: only, except: except)
yield
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
end
end
......@@ -443,10 +514,10 @@ def clear_performed_jobs
performed_jobs.clear
end
def enqueued_jobs_with(only: nil, except: nil, queue: nil)
def jobs_with(jobs, only: nil, except: nil, queue: nil)
validate_option(only: only, except: except)
enqueued_jobs.count do |job|
jobs.count do |job|
job_class = job.fetch(:job)
if only
......@@ -454,17 +525,27 @@ def enqueued_jobs_with(only: nil, except: nil, queue: nil)
elsif except
next false if Array(except).include?(job_class)
end
if queue
next false unless queue.to_s == job.fetch(:queue, job_class.queue_name)
end
yield job if block_given?
true
end
end
def flush_enqueued_jobs(only: nil, except: nil)
enqueued_jobs_with(only: only, except: except) do |payload|
def enqueued_jobs_with(only: nil, except: nil, queue: nil, &block)
jobs_with(enqueued_jobs, only: only, except: except, queue: queue, &block)
end
def performed_jobs_with(only: nil, except: nil, queue: nil, &block)
jobs_with(performed_jobs, only: only, except: except, queue: queue, &block)
end
def flush_enqueued_jobs(only: nil, except: nil, queue: nil)
enqueued_jobs_with(only: only, except: except, queue: queue) do |payload|
args = ActiveJob::Arguments.deserialize(payload[:args])
instantiate_job(payload.merge(args: args)).perform_now
queue_adapter.performed_jobs << payload
......
......@@ -618,6 +618,12 @@ def test_perform_enqueued_jobs_with_only_option_doesnt_leak_outside_the_block
assert_nil queue_adapter.filter
end
def test_perform_enqueued_jobs_without_block_with_only_option_doesnt_leak
perform_enqueued_jobs only: HelloJob
assert_nil queue_adapter.filter
end
def test_perform_enqueued_jobs_with_except_option_doesnt_leak_outside_the_block
assert_nil queue_adapter.reject
perform_enqueued_jobs except: HelloJob do
......@@ -626,20 +632,148 @@ def test_perform_enqueued_jobs_with_except_option_doesnt_leak_outside_the_block
assert_nil queue_adapter.reject
end
def test_perform_enqueued_jobs_without_block_with_except_option_doesnt_leak
perform_enqueued_jobs except: HelloJob
assert_nil queue_adapter.reject
end
def test_perform_enqueued_jobs_with_queue_option_doesnt_leak_outside_the_block
assert_nil queue_adapter.queue
perform_enqueued_jobs queue: :some_queue do
assert_equal :some_queue, queue_adapter.queue
end
assert_nil queue_adapter.queue
end
def test_perform_enqueued_jobs_without_block_with_queue_option_doesnt_leak
perform_enqueued_jobs queue: :some_queue
assert_nil queue_adapter.reject
end
def test_perform_enqueued_jobs_with_block
perform_enqueued_jobs do
HelloJob.perform_later("kevin")
LoggingJob.perform_later("bogdan")
end
assert_performed_jobs 2
end
def test_perform_enqueued_jobs_without_block
HelloJob.perform_later("kevin")
LoggingJob.perform_later("bogdan")
assert_performed_jobs 1, only: HelloJob do
perform_enqueued_jobs
perform_enqueued_jobs
assert_performed_jobs 2
end
def test_perform_enqueued_jobs_with_block_with_only_option
perform_enqueued_jobs only: LoggingJob do
HelloJob.perform_later("kevin")
LoggingJob.perform_later("bogdan")
end
assert_performed_jobs 1
assert_performed_jobs 1, only: LoggingJob
end
def test_perform_enqueued_jobs_without_block_respects_filter
def test_perform_enqueued_jobs_without_block_with_only_option
HelloJob.perform_later("kevin")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs only: LoggingJob
assert_performed_jobs 1
assert_performed_jobs 1, only: LoggingJob
end
def test_perform_enqueued_jobs_with_block_with_except_option
perform_enqueued_jobs except: HelloJob do
HelloJob.perform_later("kevin")
LoggingJob.perform_later("bogdan")
end
assert_performed_jobs 1
assert_performed_jobs 1, only: LoggingJob
end
def test_perform_enqueued_jobs_without_block_with_except_option
HelloJob.perform_later("kevin")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs except: HelloJob
assert_performed_jobs 1
assert_performed_jobs 1, only: LoggingJob
end
def test_perform_enqueued_jobs_with_block_with_queue_option
perform_enqueued_jobs queue: :some_queue do
HelloJob.set(queue: :some_queue).perform_later("kevin")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.perform_later("bogdan")
end
assert_no_performed_jobs do
perform_enqueued_jobs only: LoggingJob
assert_performed_jobs 1
assert_performed_jobs 1, only: HelloJob, queue: :some_queue
end
def test_perform_enqueued_jobs_without_block_with_queue_option
HelloJob.set(queue: :some_queue).perform_later("kevin")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs queue: :some_queue
assert_performed_jobs 1
assert_performed_jobs 1, only: HelloJob, queue: :some_queue
end
def test_perform_enqueued_jobs_with_block_with_only_and_queue_options
perform_enqueued_jobs only: HelloJob, queue: :other_queue do
HelloJob.set(queue: :some_queue).perform_later("kevin")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("bogdan")
end
assert_performed_jobs 1
assert_performed_jobs 1, only: HelloJob, queue: :other_queue
end
def test_perform_enqueued_jobs_without_block_with_only_and_queue_options
HelloJob.set(queue: :some_queue).perform_later("kevin")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("bogdan")
perform_enqueued_jobs only: HelloJob, queue: :other_queue
assert_performed_jobs 1
assert_performed_jobs 1, only: HelloJob, queue: :other_queue
end
def test_perform_enqueued_jobs_with_block_with_except_and_queue_options
perform_enqueued_jobs except: HelloJob, queue: :other_queue do
HelloJob.set(queue: :other_queue).perform_later("kevin")
LoggingJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("bogdan")
end
assert_performed_jobs 1
assert_performed_jobs 1, only: LoggingJob, queue: :other_queue
end
def test_perform_enqueued_jobs_without_block_with_except_and_queue_options
HelloJob.set(queue: :other_queue).perform_later("kevin")
LoggingJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("bogdan")
perform_enqueued_jobs except: HelloJob, queue: :other_queue
assert_performed_jobs 1
assert_performed_jobs 1, only: LoggingJob, queue: :other_queue
end
def test_assert_performed_jobs
......@@ -747,6 +881,28 @@ def test_assert_performed_jobs_with_only_option
end
end
def test_assert_performed_jobs_without_block_with_only_option
HelloJob.perform_later("jeremy")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs
assert_performed_jobs 1, only: HelloJob
end
def test_assert_performed_jobs_without_block_with_only_option_failure
LoggingJob.perform_later("jeremy")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, only: HelloJob
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_performed_jobs_with_except_option
assert_nothing_raised do
assert_performed_jobs 1, except: LoggingJob do
......@@ -756,6 +912,28 @@ def test_assert_performed_jobs_with_except_option
end
end
def test_assert_performed_jobs_without_block_with_except_option
HelloJob.perform_later("jeremy")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs
assert_performed_jobs 1, except: HelloJob
end
def test_assert_performed_jobs_without_block_with_except_option_failure
HelloJob.perform_later("jeremy")
HelloJob.perform_later("bogdan")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, except: HelloJob
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_performed_jobs_with_only_and_except_option
error = assert_raise ArgumentError do
assert_performed_jobs 1, only: HelloJob, except: HelloJob do
......@@ -767,6 +945,19 @@ def test_assert_performed_jobs_with_only_and_except_option
assert_match(/`:only` and `:except`/, error.message)
end
def test_assert_performed_jobs_without_block_with_only_and_except_options
error = assert_raise ArgumentError do
HelloJob.perform_later("jeremy")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs
assert_performed_jobs 1, only: HelloJob, except: HelloJob
end
assert_match(/`:only` and `:except`/, error.message)
end
def test_assert_performed_jobs_with_only_option_as_array
assert_nothing_raised do
assert_performed_jobs 2, only: [HelloJob, LoggingJob] do
......@@ -892,6 +1083,134 @@ def test_assert_performed_jobs_with_only_and_except_option_and_too_many_sent
assert_match(/`:only` and `:except`/, error.message)
end
def test_assert_performed_jobs_with_queue_option
assert_performed_jobs 1, queue: :some_queue do
HelloJob.set(queue: :some_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
end
end
def test_assert_performed_jobs_with_queue_option_failure
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, queue: :some_queue do
HelloJob.set(queue: :other_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
end
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_performed_jobs_without_block_with_queue_option
HelloJob.set(queue: :some_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
perform_enqueued_jobs
assert_performed_jobs 1, queue: :some_queue
end
def test_assert_performed_jobs_without_block_with_queue_option_failure
HelloJob.set(queue: :other_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, queue: :some_queue
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_performed_jobs_with_only_and_queue_options
assert_performed_jobs 1, only: HelloJob, queue: :some_queue do
HelloJob.set(queue: :some_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
end
end
def test_assert_performed_jobs_with_only_and_queue_options_failure
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, only: HelloJob, queue: :some_queue do
HelloJob.set(queue: :other_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
end
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_performed_jobs_without_block_with_only_and_queue_options
HelloJob.set(queue: :some_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
perform_enqueued_jobs
assert_performed_jobs 1, only: HelloJob, queue: :some_queue
end
def test_assert_performed_jobs_without_block_with_only_and_queue_options_failure
HelloJob.set(queue: :other_queue).perform_later("jeremy")
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, only: HelloJob, queue: :some_queue
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_performed_jobs_with_except_and_queue_options
assert_performed_jobs 1, except: HelloJob, queue: :other_queue do
HelloJob.set(queue: :other_queue).perform_later("jeremy")
LoggingJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("jeremy")
end
end
def test_assert_performed_jobs_with_except_and_queue_options_failuree
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, except: HelloJob, queue: :other_queue do
HelloJob.set(queue: :other_queue).perform_later("jeremy")
LoggingJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
end
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_performed_jobs_without_block_with_except_and_queue_options
HelloJob.set(queue: :other_queue).perform_later("jeremy")
LoggingJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("jeremy")
perform_enqueued_jobs
assert_performed_jobs 1, except: HelloJob, queue: :other_queue
end
def test_assert_performed_jobs_with_except_and_queue_options_failuree
HelloJob.set(queue: :other_queue).perform_later("jeremy")
LoggingJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_jobs 1, except: HelloJob, queue: :other_queue
end
assert_match(/1 .* but 0/, error.message)
end
def test_assert_no_performed_jobs_with_only_option
assert_nothing_raised do
assert_no_performed_jobs only: HelloJob do
......@@ -900,6 +1219,26 @@ def test_assert_no_performed_jobs_with_only_option
end
end
def test_assert_no_performed_jobs_without_block_with_only_option
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs
assert_no_performed_jobs only: HelloJob
end
def test_assert_no_performed_jobs_without_block_with_only_option_failure
HelloJob.perform_later("bogdan")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs only: HelloJob
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_no_performed_jobs_with_except_option
assert_nothing_raised do
assert_no_performed_jobs except: LoggingJob do
......@@ -908,6 +1247,26 @@ def test_assert_no_performed_jobs_with_except_option
end
end
def test_assert_no_performed_jobs_without_block_with_except_option
HelloJob.perform_later("jeremy")
perform_enqueued_jobs
assert_no_performed_jobs except: HelloJob
end
def test_assert_no_performed_jobs_without_block_with_except_option_failure
LoggingJob.perform_later("jeremy")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs except: HelloJob
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_no_performed_jobs_with_only_and_except_option
error = assert_raise ArgumentError do
assert_no_performed_jobs only: HelloJob, except: HelloJob do
......@@ -918,6 +1277,19 @@ def test_assert_no_performed_jobs_with_only_and_except_option
assert_match(/`:only` and `:except`/, error.message)
end
def test_assert_no_performed_jobs_without_block_with_only_and_except_options
error = assert_raise ArgumentError do
HelloJob.perform_later("jeremy")
LoggingJob.perform_later("bogdan")
perform_enqueued_jobs
assert_no_performed_jobs only: HelloJob, except: HelloJob
end
assert_match(/`:only` and `:except`/, error.message)
end
def test_assert_no_performed_jobs_with_only_option_as_array
assert_nothing_raised do
assert_no_performed_jobs only: [HelloJob, RescueJob] do
......@@ -978,13 +1350,141 @@ def test_assert_no_performed_jobs_with_only_and_except_option_failure
assert_match(/`:only` and `:except`/, error.message)
end
def test_assert_performed_job
def test_assert_no_performed_jobs_with_queue_option
assert_no_performed_jobs queue: :some_queue do
HelloJob.set(queue: :other_queue).perform_later("jeremy")
end
end
def test_assert_no_performed_jobs_with_queue_option_failure
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs queue: :some_queue do
HelloJob.set(queue: :some_queue).perform_later("jeremy")
end
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_no_performed_jobs_without_block_with_queue_option
HelloJob.set(queue: :other_queue).perform_later("jeremy")
perform_enqueued_jobs
assert_no_performed_jobs queue: :some_queue
end
def test_assert_no_performed_jobs_without_block_with_queue_option_failure
HelloJob.set(queue: :some_queue).perform_later("jeremy")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs queue: :some_queue
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_no_performed_jobs_with_only_and_queue_options
assert_no_performed_jobs only: HelloJob, queue: :some_queue do
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
end
end
def test_assert_no_performed_jobs_with_only_and_queue_options_failure
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs only: HelloJob, queue: :some_queue do
HelloJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
end
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_no_performed_jobs_without_block_with_only_and_queue_options
HelloJob.set(queue: :other_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
perform_enqueued_jobs
assert_no_performed_jobs only: HelloJob, queue: :some_queue
end
def test_assert_no_performed_jobs_without_block_with_only_and_queue_options_failure
HelloJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs only: HelloJob, queue: :some_queue
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_no_performed_jobs_with_except_and_queue_options
assert_no_performed_jobs except: HelloJob, queue: :some_queue do
HelloJob.set(queue: :other_queue).perform_later("bogdan")
HelloJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("jeremy")
end
end
def test_assert_no_performed_jobs_with_except_and_queue_options_failure
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs except: HelloJob, queue: :some_queue do
HelloJob.set(queue: :other_queue).perform_later("bogdan")
HelloJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
end
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_no_performed_jobs_without_block_with_except_and_queue_options
HelloJob.set(queue: :other_queue).perform_later("bogdan")
HelloJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :other_queue).perform_later("jeremy")
perform_enqueued_jobs
assert_no_performed_jobs except: HelloJob, queue: :some_queue
end
def test_assert_no_performed_jobs_without_block_with_except_and_queue_options_failure
HelloJob.set(queue: :other_queue).perform_later("bogdan")
HelloJob.set(queue: :some_queue).perform_later("bogdan")
LoggingJob.set(queue: :some_queue).perform_later("jeremy")
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_performed_jobs except: HelloJob, queue: :some_queue
end
assert_match(/0 .* but 1/, error.message)
end
def test_assert_performed_with
assert_performed_with(job: NestedJob, queue: "default") do
NestedJob.perform_later
end
end
def test_assert_performed_job_returns
def test_assert_performed_with_without_block
NestedJob.perform_later
perform_enqueued_jobs
assert_performed_with(job: NestedJob, queue: "default")
end
def test_assert_performed_with_returns
job = assert_performed_with(job: NestedJob, queue: "default") do
NestedJob.perform_later
end
......@@ -995,7 +1495,20 @@ def test_assert_performed_job_returns
assert_equal "default", job.queue_name
end
def test_assert_performed_job_failure
def test_assert_performed_with_without_block_returns
NestedJob.perform_later
perform_enqueued_jobs
job = assert_performed_with(job: NestedJob, queue: "default")
assert_instance_of NestedJob, job
assert_nil job.scheduled_at
assert_equal [], job.arguments
assert_equal "default", job.queue_name
end
def test_assert_performed_with_failure
assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_with(job: LoggingJob) do
HelloJob.perform_later
......@@ -1009,7 +1522,23 @@ def test_assert_performed_job_failure
end
end
def test_assert_performed_job_with_at_option
def test_assert_performed_with_without_block_failure
HelloJob.perform_later
perform_enqueued_jobs
assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_with(job: LoggingJob)
end
HelloJob.set(queue: "important").perform_later
assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_with(job: HelloJob, queue: "low")
end
end
def test_assert_performed_with_with_at_option
assert_performed_with(job: HelloJob, at: Date.tomorrow.noon) do
HelloJob.set(wait_until: Date.tomorrow.noon).perform_later
end
......@@ -1021,14 +1550,37 @@ def test_assert_performed_job_with_at_option
end
end
def test_assert_performed_job_with_global_id_args
def test_assert_performed_with_without_block_with_at_option
HelloJob.set(wait_until: Date.tomorrow.noon).perform_later
perform_enqueued_jobs
assert_performed_with(job: HelloJob, at: Date.tomorrow.noon)
HelloJob.set(wait_until: Date.tomorrow.noon).perform_later
perform_enqueued_jobs
assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_with(job: HelloJob, at: Date.today.noon)
end
end
def test_assert_performed_wiht_with_global_id_args
ricardo = Person.new(9)
assert_performed_with(job: HelloJob, args: [ricardo]) do
HelloJob.perform_later(ricardo)
end
end
def test_assert_performed_job_failure_with_global_id_args
def test_assert_performed_with_without_bllock_with_global_id_args
ricardo = Person.new(9)
HelloJob.perform_later(ricardo)
perform_enqueued_jobs
assert_performed_with(job: HelloJob, args: [ricardo])
end
def test_assert_performed_with_failure_with_global_id_args
ricardo = Person.new(9)
wilma = Person.new(11)
error = assert_raise ActiveSupport::TestCase::Assertion do
......@@ -1040,7 +1592,19 @@ def test_assert_performed_job_failure_with_global_id_args
assert_equal "No performed job found with {:job=>HelloJob, :args=>[#{wilma.inspect}]}", error.message
end
def test_assert_performed_job_does_not_change_jobs_count
def test_assert_performed_with_without_block_failure_with_global_id_args
ricardo = Person.new(9)
wilma = Person.new(11)
HelloJob.perform_later(ricardo)
perform_enqueued_jobs
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_with(job: HelloJob, args: [wilma])
end
assert_equal "No performed job found with {:job=>HelloJob, :args=>[#{wilma.inspect}]}", error.message
end
def test_assert_performed_with_does_not_change_jobs_count
assert_performed_with(job: HelloJob) do
HelloJob.perform_later
end
......@@ -1051,6 +1615,18 @@ def test_assert_performed_job_does_not_change_jobs_count
assert_equal 2, queue_adapter.performed_jobs.count
end
def test_assert_performed_with_without_block_does_not_change_jobs_count
HelloJob.perform_later
perform_enqueued_jobs
assert_performed_with(job: HelloJob)
perform_enqueued_jobs
HelloJob.perform_later
assert_performed_with(job: HelloJob)
assert_equal 2, queue_adapter.performed_jobs.count
end
end
class OverrideQueueAdapterTest < ActiveJob::TestCase
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册