全て、
バックグラウンドで変更されているオブジェクトの属性を変更するために、成功とエラーのコールバックを使用するカスタム 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_time
DJ の設定で見られるように)。
さて、どうやってそれをテストしますか?API がタイムアウトを返さないので、VCR でこれを処理する方法がわかりません。DJ ジョブはキューで実行されておらず、実行のたびにスイートが 2 分間遅延することは特に望んでいません。
考えや提案をいただければ幸いです。ありがとう!