Ability to test activejobs with relative delay
`assert_enqueued_with` and `assert_performed_with` were not able to properly test jobs with relative delay. `:at` option was asserted for equality and test will always fail cause small fraction of time will pass between job call and assertion. This commit fixes that by droping microseconds from `:at` argument assertions.
This commit is contained in:
parent
c9b7b9ff8a
commit
10d0f48ad8
|
@ -1,3 +1,6 @@
|
|||
* `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay.
|
||||
|
||||
*Vlado Cingel*
|
||||
|
||||
|
||||
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activejob/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -630,7 +630,7 @@ module ActiveJob
|
|||
|
||||
def prepare_args_for_assertion(args)
|
||||
args.dup.tap do |arguments|
|
||||
arguments[:at] = arguments[:at].to_f if arguments[:at]
|
||||
arguments[:at] = round_time_arguments(arguments[:at]) if arguments[:at]
|
||||
arguments[:args] = round_time_arguments(arguments[:args]) if arguments[:args]
|
||||
end
|
||||
end
|
||||
|
@ -650,6 +650,7 @@ module ActiveJob
|
|||
|
||||
def deserialize_args_for_assertion(job)
|
||||
job.dup.tap do |new_job|
|
||||
new_job[:at] = round_time_arguments(Time.at(new_job[:at])) if new_job[:at]
|
||||
new_job[:args] = ActiveJob::Arguments.deserialize(new_job[:args]) if new_job[:args]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -621,6 +621,12 @@ class EnqueuedJobsTest < ActiveJob::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_assert_enqueued_with_with_relative_at_option
|
||||
assert_enqueued_with(job: HelloJob, at: 5.minutes.from_now) do
|
||||
HelloJob.set(wait: 5.minutes).perform_later
|
||||
end
|
||||
end
|
||||
|
||||
def test_assert_enqueued_with_with_no_block_with_at_option
|
||||
HelloJob.set(wait_until: Date.tomorrow.noon).perform_later
|
||||
assert_enqueued_with(job: HelloJob, at: Date.tomorrow.noon)
|
||||
|
@ -1663,6 +1669,18 @@ class PerformedJobsTest < ActiveJob::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_assert_performed_with_with_relative_at_option
|
||||
assert_performed_with(job: HelloJob, at: 5.minutes.from_now) do
|
||||
HelloJob.set(wait: 5.minutes).perform_later
|
||||
end
|
||||
|
||||
assert_raise ActiveSupport::TestCase::Assertion do
|
||||
assert_performed_with(job: HelloJob, at: 2.minutes.from_now) do
|
||||
HelloJob.set(wait: 1.minute).perform_later
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_assert_performed_with_without_block_with_at_option
|
||||
HelloJob.set(wait_until: Date.tomorrow.noon).perform_later
|
||||
|
||||
|
|
Loading…
Reference in New Issue