rails--rails/activejob/CHANGELOG.md

2.9 KiB

  • assert_enqueued_with and assert_performed_with now returns the matched job instance for further assertions.

    Jean Boussier

  • Include I18n.locale into job serialization/deserialization and use it around perform.

    Fixes #20799.

    Johannes Opper

  • Allow DelayedJob, Sidekiq, qu, and que to report the job id back to ActiveJob::Base as provider_job_id.

    Fixes #18821.

    Kevin Deisz, Jeroen van Baarsen

  • assert_enqueued_jobs and assert_performed_jobs in block form use the given number as expected value. This makes the error message much easier to understand.

    y-yagi

  • A generated job now inherits from app/jobs/application_job.rb by default.

    Jeroen van Baarsen

  • Add an :only option to perform_enqueued_jobs to filter jobs based on type.

    This allows specific jobs to be tested, while preventing others from being performed unnecessarily.

    Example:

    def test_hello_job
      assert_performed_jobs 1, only: HelloJob do
        HelloJob.perform_later('jeremy')
        LoggingJob.perform_later
      end
    end
    

    An array may also be specified, to support testing multiple jobs.

    Example:

    def test_hello_and_logging_jobs
      assert_nothing_raised do
        assert_performed_jobs 2, only: [HelloJob, LoggingJob] do
          HelloJob.perform_later('jeremy')
          LoggingJob.perform_later('stewie')
          RescueJob.perform_later('david')
        end
      end
    end
    

    Fixes #18802.

    Michael Ryan

  • Allow keyword arguments to be used with Active Job.

    Fixes #18741.

    Sean Griffin

  • Add :only option to assert_enqueued_jobs, to check the number of times a specific kind of job is enqueued.

    Example:

    def test_logging_job
      assert_enqueued_jobs 1, only: LoggingJob do
        LoggingJob.perform_later
        HelloJob.perform_later('jeremy')
      end
    end
    

    George Claghorn

  • ActiveJob::Base.deserialize delegates to the job class.

    Since ActiveJob::Base#deserialize can be overridden by subclasses (like ActiveJob::Base#serialize) this allows jobs to attach arbitrary metadata when they get serialized and read it back when they get performed.

    Example:

    class DeliverWebhookJob < ActiveJob::Base
      def serialize
        super.merge('attempt_number' => (@attempt_number || 0) + 1)
      end
    
      def deserialize(job_data)
        super
        @attempt_number = job_data['attempt_number']
      end
    
      rescue_from(TimeoutError) do |exception|
        raise exception if @attempt_number > 5
        retry_job(wait: 10)
      end
    end
    

    Isaac Seymour

Please check 4-2-stable for previous changes.