3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

Rspecでsidekiqのジョブ登録をテストしたいとき

SidekiqのテストはSidekiq::Testing.fake! を使うと便利です。
テストの前に実行するとRedisにジョブを登録するのではなく、workerオブジェクトのjobsメソッドで、登録されるjobを確認できるようになります。

以下はjobが登録されることを確認するテストです。
HogeWorker.jobs.sizeで登録されたjobの数を取得しています。


require sidekiq/testing
# 省略

before do
  Sidekiq::Testing.fake!
end

context ‘ワーカーのテスト’ do
  it do
      expect { HogeWorker.new.perform }.to change { HogeWorker.jobs.size }.by(1)
  end
end

上記でもテストできるのですが、beforeブロックでSidekiq::Testing.fake!を実行すると、
グローバルで設定が有効になり他のテストにも影響を与えてしまいました。
なので、使う時はブロックで囲って以下のようにすると、特定のテストだけでSidekiq::Testing.fake!を有効にすることができます。


require sidekiq/testing
# 省略

context ‘ワーカーのテスト’ do
  it do
    Sidekiq::Testing.fake! do
      expect { HogeWorkernew.perform }.to change { HogeWorker.jobs.size }.by(1)
    end
  end
end
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
Sign upLogin
3
Help us understand the problem. What are the problem?