提交 9d3042d0 编写于 作者: R Richard Manyanza

Fix ActiveJob assertions with a GlobalID object argument

上级 139c232b
...@@ -175,9 +175,10 @@ def assert_enqueued_with(args = {}, &_block) ...@@ -175,9 +175,10 @@ def assert_enqueued_with(args = {}, &_block)
original_enqueued_jobs = enqueued_jobs.dup original_enqueued_jobs = enqueued_jobs.dup
clear_enqueued_jobs clear_enqueued_jobs
args.assert_valid_keys(:job, :args, :at, :queue) args.assert_valid_keys(:job, :args, :at, :queue)
serialized_args = serialize_args_for_assertion(args)
yield yield
matching_job = enqueued_jobs.any? do |job| matching_job = enqueued_jobs.any? do |job|
args.all? { |key, value| value == job[key] } serialized_args.all? { |key, value| value == job[key] }
end end
assert matching_job, "No enqueued job found with #{args}" assert matching_job, "No enqueued job found with #{args}"
ensure ensure
...@@ -195,9 +196,10 @@ def assert_performed_with(args = {}, &_block) ...@@ -195,9 +196,10 @@ def assert_performed_with(args = {}, &_block)
original_performed_jobs = performed_jobs.dup original_performed_jobs = performed_jobs.dup
clear_performed_jobs clear_performed_jobs
args.assert_valid_keys(:job, :args, :at, :queue) args.assert_valid_keys(:job, :args, :at, :queue)
serialized_args = serialize_args_for_assertion(args)
perform_enqueued_jobs { yield } perform_enqueued_jobs { yield }
matching_job = performed_jobs.any? do |job| matching_job = performed_jobs.any? do |job|
args.all? { |key, value| value == job[key] } serialized_args.all? { |key, value| value == job[key] }
end end
assert matching_job, "No performed job found with #{args}" assert matching_job, "No performed job found with #{args}"
ensure ensure
...@@ -239,6 +241,14 @@ def enqueued_jobs_size(only: nil) ...@@ -239,6 +241,14 @@ def enqueued_jobs_size(only: nil)
enqueued_jobs.size enqueued_jobs.size
end end
end end
def serialize_args_for_assertion(args)
serialized_args = args.dup
if job_args = serialized_args.delete(:args)
serialized_args[:args] = ActiveJob::Arguments.serialize(job_args)
end
serialized_args
end
end end
end end
end end
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
require 'jobs/hello_job' require 'jobs/hello_job'
require 'jobs/logging_job' require 'jobs/logging_job'
require 'jobs/nested_job' require 'jobs/nested_job'
require 'models/person'
class EnqueuedJobsTest < ActiveJob::TestCase class EnqueuedJobsTest < ActiveJob::TestCase
def test_assert_enqueued_jobs def test_assert_enqueued_jobs
...@@ -175,6 +176,25 @@ def test_assert_enqueued_job_args ...@@ -175,6 +176,25 @@ def test_assert_enqueued_job_args
end end
end end
end end
def test_assert_enqueued_job_with_global_id_args
ricardo = Person.new(9)
assert_enqueued_with(job: HelloJob, args: [ricardo]) do
HelloJob.perform_later(ricardo)
end
end
def test_assert_enqueued_job_failure_with_global_id_args
ricardo = Person.new(9)
wilma = Person.new(11)
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_enqueued_with(job: HelloJob, args: [wilma]) do
HelloJob.perform_later(ricardo)
end
end
assert_equal "No enqueued job found with {:job=>HelloJob, :args=>[#{wilma.inspect}]}", error.message
end
end end
class PerformedJobsTest < ActiveJob::TestCase class PerformedJobsTest < ActiveJob::TestCase
...@@ -282,4 +302,23 @@ def test_assert_performed_job_failure ...@@ -282,4 +302,23 @@ def test_assert_performed_job_failure
end end
end end
end end
def test_assert_performed_job_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
ricardo = Person.new(9)
wilma = Person.new(11)
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_performed_with(job: HelloJob, args: [wilma]) do
HelloJob.perform_later(ricardo)
end
end
assert_equal "No performed job found with {:job=>HelloJob, :args=>[#{wilma.inspect}]}", error.message
end
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册