Module: ActiveJob::Continuation::TestHelper
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
|
|
Defined in: | activejob/lib/active_job/continuation/test_helper.rb |
Overview
Test helper for ::ActiveJob::Continuable
jobs.
Constant Summary
::ActiveSupport::Testing::Assertions
- Included
Instance Attribute Summary
Instance Method Summary
-
#interrupt_job_after_step(job, step, &block)
Interrupt
a job after a step. -
#interrupt_job_during_step(job, step, cursor: nil, &block)
Interrupt
a job during a step. - #after_step?(job, step) ⇒ Boolean private
- #continuation_for(klass) private
- #during_step?(job, step, cursor: nil) ⇒ Boolean private
::ActiveJob::TestHelper
- Included
#assert_enqueued_jobs | Asserts that the number of enqueued jobs matches the given number. |
#assert_enqueued_with | Asserts that the job has been enqueued with the given arguments. |
#assert_no_enqueued_jobs | Asserts that no jobs have been enqueued. |
#assert_no_performed_jobs | Asserts that no jobs have been performed. |
#assert_performed_jobs | Asserts that the number of performed jobs matches the given number. |
#assert_performed_with | Asserts that the job has been performed with the given arguments. |
#perform_enqueued_jobs | Performs all enqueued jobs. |
#queue_adapter | Accesses the queue_adapter set by |
#queue_adapter_for_test | Returns a queue adapter instance to use with all Active Job test helpers. |
#clear_enqueued_jobs, #clear_performed_jobs, #deserialize_args_for_assertion, #enqueued_jobs_with, #filter_as_proc, #flush_enqueued_jobs, #instantiate_job, #jobs_with, #performed_jobs_with, #prepare_args_for_assertion, #queue_adapter_changed_jobs, #require_active_job_test_adapter!, #validate_option, #after_teardown, #before_setup |
::ActiveSupport::Testing::Assertions
- Included
#assert_changes | Assertion that the result of evaluating an expression is changed before and after invoking the passed in block. |
#assert_difference | Test numeric difference between the return value of an expression as a result of what is evaluated in the yielded block. |
#assert_no_changes | Assertion that the result of evaluating an expression is not changed before and after invoking the passed in block. |
#assert_no_difference | Assertion that the numeric result of evaluating an expression is not changed before and after invoking the passed in block. |
#assert_not | Asserts that an expression is not truthy. |
#assert_nothing_raised | Assertion that the block should not raise an exception. |
#assert_raise | |
#assert_raises | Asserts that a block raises one of |
#_assert_nothing_raised_or_warn, #_callable_to_source_string |
Instance Method Details
#after_step?(job, step) ⇒ Boolean
(private)
# File 'activejob/lib/active_job/continuation/test_helper.rb', line 80
def after_step?(job, step) if (continuation = continuation_for(job)) continuation["completed"].last == step.to_s && continuation["current"].nil? end end
#continuation_for(klass) (private)
[ GitHub ]# File 'activejob/lib/active_job/continuation/test_helper.rb', line 69
def continuation_for(klass) job = ActiveSupport::ExecutionContext.to_h[:job] job.send(:continuation)&.to_h if job && job.is_a?(klass) end
#during_step?(job, step, cursor: nil) ⇒ Boolean
(private)
# File 'activejob/lib/active_job/continuation/test_helper.rb', line 74
def during_step?(job, step, cursor: nil) if (continuation = continuation_for(job)) continuation["current"] == [ step.to_s, cursor ] end end
#interrupt_job_after_step(job, step, &block)
Interrupt
a job after a step.
class MyJob < ApplicationJob
include ActiveJob::Continuable
cattr_accessor :items, default: []
def perform
step :step_one { items << 1 }
step :step_two { items << 2 }
step :step_three { items << 3 }
step :step_four { items << 4 }
end
end
test "interrupt job after step" do
MyJob.perform_later
interrupt_job_after_step(MyJob, :step_two) { perform_enqueued_jobs }
assert_equal [1, 2], MyJob.items
perform_enqueued_jobs
assert_equal [1, 2, 3, 4], MyJob.items
end
# File 'activejob/lib/active_job/continuation/test_helper.rb', line 63
def interrupt_job_after_step(job, step, &block) require_active_job_test_adapter!("interrupt_job_after_step") queue_adapter.with(stopping: ->() { after_step?(job, step) }, &block) end
#interrupt_job_during_step(job, step, cursor: nil, &block)
Interrupt
a job during a step.
class MyJob < ApplicationJob
include ActiveJob::Continuable
cattr_accessor :items, default: []
def perform
step :my_step, start: 1 do |step|
(step.cursor..10).each do |i|
items << i
step.advance!
end
end
end
end
test "interrupt job during step" do
MyJob.perform_later
interrupt_job_during_step(MyJob, :my_step, cursor: 6) { perform_enqueued_jobs }
assert_equal [1, 2, 3, 4, 5], MyJob.items
perform_enqueued_jobs
assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], MyJob.items
end
# File 'activejob/lib/active_job/continuation/test_helper.rb', line 36
def interrupt_job_during_step(job, step, cursor: nil, &block) require_active_job_test_adapter!("interrupt_job_during_step") queue_adapter.with(stopping: ->() { during_step?(job, step, cursor: cursor) }, &block) end