2

all,

I have a custom Delayed::Job setup that uses the the success and error callbacks to change the attributes of the object that is being modified in the background. This object is interacting with an external API. To test this, I'm using RSpec with VCR to record external API interactions.

Here's my worker:

class SuperJob < Struct.new(:Thingy_id)
  include JobMethods

  def perform
    thing = Thingy.find(Thingy_id)
    run_update(thing)
  end

  def success(job)
    thing = Thingy.find_by_job_id(job.id)
    thing.update(job_finished_at: Time.now, job_id: nil)
  end

  def error(job, exception)
    thing = Thingy.find_by_job_id(job.id)
    thing.update(job_id: -1, disabled: true)
  end
end

Here are my DJ settings:

Delayed::Worker.delay_jobs = !Rails.env.test?
Delayed::Worker.max_run_time = 2.minutes

I've successfully used RSpec to test the results of the success callback. What I'd like to do is test the results of the error callback. The external API doesn't have any particular length limit on the time of the response, to for my app I'd like to limit the maximum wait time to 2 minutes (as seen in the max_run_time setting for DJ).

Now, how do I test that? The API isn't returning a timeout, so I'm not sure how I need to handle this in VCR. The DJ job isn't running in a queue and I don't particularly want the suite to delay for 2 minutes on every run.

Thoughts or suggestions would be greatly appreciated! Thanks!

Andrew Anderson
  • 441
  • 4
  • 14

0 Answers0