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