Help us understand the problem. What is going on with this article?

RSpecでの一時的な非同期Jobのqueue_adapter設定変更メモ

More than 1 year has passed since last update.

結論

あるspecファイルだけで一時的に queue_adapter を変更したい場合は

require 'spec_helper'

RSpec.describe HogeJob do
  include ActiveJob::TestHelper
  Rails.application.config.active_job.queue_adapter = :test # <= これ

  it do
    perform_enqueued_jobs do
      HogeJob.new.perform("my")
    end
  end
end

のように設定すること。

悪い例

次のように設定してはいけない。他のspecまで影響を受けてしまい、 :test アダプター以外を使う前提でテストが書かれている場合にテストが通らなくなってしまった。

require 'spec_helper'

RSpec.describe HogeJob do
  include ActiveJob::TestHelper
  ActiveJob::Base.queue_adapter = :test # <= ダメ

  it do
    perform_enqueued_jobs do
      HogeJob.new.perform("my")
    end
  end
end

理由

誰か教えて

ちなみに

すべてのspecに queue_adapter の変更を反映したい場合は普通 config/environments/test.rb で設定するよね。
今回は一部のspecでのみ、変更したくなって上記のハマりポイントを踏んだ。

qpSHiNqp
技術担当。 好きなものは、クルマ、サバゲー、ウィンタースポーツです。
onecareer
ワンランク上のキャリアを目指す学生のための新卒採用サービスONE CAREERの開発・運営会社
https://www.onecareer.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away