提交 802f855e 编写于 作者: T Tamir Duberstein

`ActiveJob::QueueAdapters::TestAdapter` is now a singleton

Since `ActiveJob::TestHelper` globally sets
`ActiveJob::Base.queue_adapter` on setup, there is no benefit in
instantiating a new `TestAdapter` per tests. The original rationale was
to allow parallel tests to run without interference, but since they'd
all mutate the global `ActiveJob::Base.queue_adapter`, that was never
realized.
上级 88b334ec
...@@ -17,8 +17,6 @@ module ClassMethods ...@@ -17,8 +17,6 @@ module ClassMethods
def queue_adapter=(name_or_adapter) def queue_adapter=(name_or_adapter)
@@queue_adapter = \ @@queue_adapter = \
case name_or_adapter case name_or_adapter
when :test
ActiveJob::QueueAdapters::TestAdapter.new
when Symbol, String when Symbol, String
load_adapter(name_or_adapter) load_adapter(name_or_adapter)
else else
......
...@@ -10,40 +10,39 @@ module QueueAdapters ...@@ -10,40 +10,39 @@ module QueueAdapters
# #
# Rails.application.config.active_job.queue_adapter = :test # Rails.application.config.active_job.queue_adapter = :test
class TestAdapter class TestAdapter
delegate :name, to: :class class << self
attr_accessor(:perform_enqueued_jobs, :perform_enqueued_at_jobs, :filter) attr_accessor(:perform_enqueued_jobs, :perform_enqueued_at_jobs, :filter)
attr_writer(:enqueued_jobs, :performed_jobs) attr_writer(:enqueued_jobs, :performed_jobs)
def initialize # Provides a store of all the enqueued jobs with the TestAdapter so you can check them.
self.perform_enqueued_jobs = false def enqueued_jobs
self.perform_enqueued_at_jobs = false @enqueued_jobs ||= []
end end
# Provides a store of all the enqueued jobs with the TestAdapter so you can check them. # Provides a store of all the performed jobs with the TestAdapter so you can check them.
def enqueued_jobs def performed_jobs
@enqueued_jobs ||= [] @performed_jobs ||= []
end end
# Provides a store of all the performed jobs with the TestAdapter so you can check them. def enqueue(job) #:nodoc:
def performed_jobs return if filtered?(job)
@performed_jobs ||= []
end
def enqueue(job) #:nodoc: job_data = job_to_hash(job)
return if filtered?(job) enqueue_or_perform(perform_enqueued_jobs, job, job_data)
end
job_data = { job: job.class, args: job.serialize['arguments'], queue: job.queue_name } def enqueue_at(job, timestamp) #:nodoc:
enqueue_or_perform(perform_enqueued_jobs, job, job_data) return if filtered?(job)
end
def enqueue_at(job, timestamp) #:nodoc: job_data = job_to_hash(job, at: timestamp)
return if filtered?(job) enqueue_or_perform(perform_enqueued_at_jobs, job, job_data)
end
job_data = { job: job.class, args: job.serialize['arguments'], queue: job.queue_name, at: timestamp } private
enqueue_or_perform(perform_enqueued_at_jobs, job, job_data)
end
private def job_to_hash(job, extras = {})
{ job: job.class, args: job.serialize.fetch('arguments'), queue: job.queue_name }.merge(extras)
end
def enqueue_or_perform(perform, job, job_data) def enqueue_or_perform(perform, job, job_data)
if perform if perform
...@@ -57,6 +56,7 @@ def enqueue_or_perform(perform, job, job_data) ...@@ -57,6 +56,7 @@ def enqueue_or_perform(perform, job, job_data)
def filtered?(job) def filtered?(job)
filter && !Array(filter).include?(job.class) filter && !Array(filter).include?(job.class)
end end
end
end end
end end
end end
...@@ -7,10 +7,12 @@ module TestHelper ...@@ -7,10 +7,12 @@ module TestHelper
included do included do
def before_setup def before_setup
@old_queue_adapter = queue_adapter @old_queue_adapter = queue_adapter
ActiveJob::Base.queue_adapter = :test ActiveJob::Base.queue_adapter = :test
clear_enqueued_jobs clear_enqueued_jobs
clear_performed_jobs clear_performed_jobs
queue_adapter.perform_enqueued_jobs = false
queue_adapter.perform_enqueued_at_jobs = false
super super
end end
...@@ -281,7 +283,7 @@ def clear_performed_jobs ...@@ -281,7 +283,7 @@ def clear_performed_jobs
def enqueued_jobs_size(only: nil) def enqueued_jobs_size(only: nil)
if only if only
enqueued_jobs.select { |job| job[:job] == only }.size enqueued_jobs.select { |job| job.fetch(:job) == only }.size
else else
enqueued_jobs.size enqueued_jobs.size
end end
......
...@@ -9,6 +9,6 @@ def test_include_helper ...@@ -9,6 +9,6 @@ def test_include_helper
end end
def test_set_test_adapter def test_set_test_adapter
assert_instance_of ActiveJob::QueueAdapters::TestAdapter, self.queue_adapter assert_equal ActiveJob::QueueAdapters::TestAdapter, self.queue_adapter
end end
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册