Testing · sidekiq/sidekiq Wiki にあるように、sidekiqをテストで利用する際には3つのモードがあります。
- fake(デフォルト)
- inline
- disable
これらを切り替えるメソッドとしてSidekiq::Testing.fake!などがあります。これらのメソッドはブロックを受け付けており、ブロックを渡すとそのブロックの中だけ一時的にモードが変わります。なので
before do Sidekiq::Testing.inline! end after do Sidekiq::Testing.fake! end
のようにするより
around do |example| Sidekiq::Testing.inline! do example.run end end
のほうが良いと思ったんですが、これらの書き方は等価ではないので場合によっては前者の書き方じゃないとダメだったりします。
後者のブロックを用いた書き方ではモードが変わるのはカレントスレッドだけ、という制限があります。このため後者をsystem testで使うと、pumaのスレッドではモードが変更されないのでした。ドキュメントもよく読むと
When passing a block, the mode change only applies to the current Thread and is not process-wide.
のように書いてありますね。そうですね。