rails/activejob/test/cases/instrumentation_test.rb

55 lines
1.6 KiB
Ruby

# frozen_string_literal: true
require "helper"
require "jobs/hello_job"
require "jobs/retry_job"
class InstrumentationTest < ActiveSupport::TestCase
include ActiveJob::TestHelper
setup do
JobBuffer.clear
end
test "perform_now emits perform events" do
events = subscribed(/perform.*\.active_job/) { HelloJob.perform_now("World!") }
assert_equal 2, events.size
assert_equal "perform_start.active_job", events[0].first
assert_equal "perform.active_job", events[1].first
end
test "perform_later emits an enqueue event" do
events = subscribed("enqueue.active_job") { HelloJob.perform_later("World!") }
assert_equal 1, events.size
end
unless adapter_is?(:inline, :sneakers)
test "retry emits an enqueue retry event" do
events = subscribed("enqueue_retry.active_job") do
perform_enqueued_jobs { RetryJob.perform_later("DefaultsError", 2) }
end
assert_equal 1, events.size
end
test "retry exhaustion emits a retry_stopped event" do
events = subscribed("retry_stopped.active_job") do
perform_enqueued_jobs { RetryJob.perform_later("CustomCatchError", 6) }
end
assert_equal 1, events.size
end
end
test "discard emits a discard event" do
events = subscribed("discard.active_job") do
perform_enqueued_jobs { RetryJob.perform_later("DiscardableError", 2) }
end
assert_equal 1, events.size
end
def subscribed(name, &block)
[].tap do |events|
ActiveSupport::Notifications.subscribed(-> (*args) { events << args }, name, &block)
end
end
end