lib/active_job/test_helper.rb in activejob-7.1.5 vs lib/active_job/test_helper.rb in activejob-7.2.0.beta1

- old
+ new

@@ -37,14 +37,17 @@ ActiveSupport.on_load(:active_job) do ActiveJob::Base.include(TestQueueAdapter) end def before_setup # :nodoc: - test_adapter = queue_adapter_for_test - + queue_adapter_specific_to_this_test_class = queue_adapter_for_test queue_adapter_changed_jobs.each do |klass| - klass.enable_test_adapter(test_adapter) + if queue_adapter_specific_to_this_test_class + klass.enable_test_adapter(queue_adapter_specific_to_this_test_class) + elsif klass._queue_adapter.nil? + klass.enable_test_adapter(ActiveJob::QueueAdapters::TestAdapter.new) + end end clear_enqueued_jobs clear_performed_jobs super @@ -59,11 +62,10 @@ # Returns a queue adapter instance to use with all Active Job test helpers. # By default, returns an instance of ActiveJob::QueueAdapters::TestAdapter. # Override this method to specify a different adapter. The adapter must # implement the same interface as ActiveJob::QueueAdapters::TestAdapter. def queue_adapter_for_test - ActiveJob::QueueAdapters::TestAdapter.new end # Asserts that the number of enqueued jobs matches the given number. # # def test_jobs @@ -116,10 +118,12 @@ # LoggingJob.perform_later # HelloJob.perform_later('elfassy') # end # end def assert_enqueued_jobs(number, only: nil, except: nil, queue: nil, &block) + require_active_job_test_adapter!("assert_enqueued_jobs") + if block_given? original_jobs = enqueued_jobs_with(only: only, except: except, queue: queue) _assert_nothing_raised_or_warn("assert_enqueued_jobs", &block) @@ -178,10 +182,12 @@ # # Note: This assertion is simply a shortcut for: # # assert_enqueued_jobs 0, &block def assert_no_enqueued_jobs(only: nil, except: nil, queue: nil, &block) + require_active_job_test_adapter!("assert_no_enqueued_jobs") + assert_enqueued_jobs 0, only: only, except: except, queue: queue, &block end # Asserts that the number of performed jobs matches the given number. # If no block is passed, <tt>perform_enqueued_jobs</tt> @@ -268,10 +274,12 @@ # 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) + require_active_job_test_adapter!("assert_performed_jobs") + if block_given? original_count = performed_jobs.size perform_enqueued_jobs(only: only, except: except, queue: queue, &block) @@ -336,10 +344,12 @@ # # Note: This assertion is simply a shortcut for: # # assert_performed_jobs 0, &block def assert_no_performed_jobs(only: nil, except: nil, queue: nil, &block) + require_active_job_test_adapter!("assert_no_performed_jobs") + assert_performed_jobs 0, only: only, except: except, queue: queue, &block end # Asserts that the job has been enqueued with the given arguments. # @@ -392,10 +402,12 @@ # assert_enqueued_with(job: MyJob, at: Date.tomorrow.noon) do # MyJob.set(wait_until: Date.tomorrow.noon).perform_later # end # end def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil, priority: nil, &block) + require_active_job_test_adapter!("assert_enqueued_with") + expected = { job: job, args: args, at: at, queue: queue, priority: priority }.compact expected_args = prepare_args_for_assertion(expected) potential_matches = [] if block_given? @@ -494,10 +506,12 @@ # assert_performed_with(job: MyJob, at: Date.tomorrow.noon) do # MyJob.set(wait_until: Date.tomorrow.noon).perform_later # end # end def assert_performed_with(job: nil, args: nil, at: nil, queue: nil, priority: nil, &block) + require_active_job_test_adapter!("assert_performed_with") + expected = { job: job, args: args, at: at, queue: queue, priority: priority }.compact expected_args = prepare_args_for_assertion(expected) potential_matches = [] if block_given? @@ -602,11 +616,14 @@ # 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. def perform_enqueued_jobs(only: nil, except: nil, queue: nil, at: nil, &block) - return flush_enqueued_jobs(only: only, except: except, queue: queue, at: at) unless block_given? + 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) @@ -644,9 +661,15 @@ def queue_adapter ActiveJob::Base.queue_adapter end private + def require_active_job_test_adapter!(method) + unless using_test_adapter? + raise ArgumentError.new("#{method} requires the Active Job test adapter, you're using #{queue_adapter.class.name}.") + end + end + def using_test_adapter? queue_adapter.is_a?(ActiveJob::QueueAdapters::TestAdapter) end def clear_enqueued_jobs