2

全て、

バックグラウンドで変更されているオブジェクトの属性を変更するために、成功とエラーのコールバックを使用するカスタム Delayed::Job セットアップがあります。このオブジェクトは外部 API とやり取りしています。これをテストするために、RSpec と VCR を使用して外部 API のやり取りを記録しています。

これが私の労働者です:

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

ここに私のDJ設定があります:

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

RSpec を使用してsuccessコールバックの結果をテストすることに成功しました。私がやりたいのは、errorコールバックの結果をテストすることです。外部 API には、応答時間に特定の長さの制限はありません。私のアプリでは、最大待機時間を 2 分に制限したいと考えています ( max_run_timeDJ の設定で見られるように)。

さて、どうやってそれをテストしますか?API がタイムアウトを返さないので、VCR でこれを処理する方法がわかりません。DJ ジョブはキューで実行されておらず、実行のたびにスイートが 2 分間遅延することは特に望んでいません。

考えや提案をいただければ幸いです。ありがとう!

4

0 に答える 0