Wiita

自分にとってのメモと, プログラミングに関する情報を発信していきます. サイト名の意味は特にありません.

Sidekiqのジョブを走らせたくないけどキューイングだけ確認したいときは Sidekiq::Testing.fake を使うと良さそう

Sidekiqを使っていて,slack通知をsidekiqのジョブとして行うようにしました.

しかしそのジョブを実行するAPIのテストを回すと,テストなのにジョブがキューイングされてslack通知が来てしまいました.

ただテストを回したいのにアプリケーションと同じようにジョブが振る舞っていたので,テストのときだけジョブを無効にするか,env=testで動作させるいい方法を探していたら,Sidekiq::Testing.fake! を使うと良さそうだとわかりました.

こんな感じでリクエスト送ってるところを囲ってあげるとジョブの中身は実行されません.ジョブの中身のテストだけ別途書いてあげれば良さそうです.

Sidekiq::Testing.fake! do
        post "/api/v1/xxx", params: { ... } # slack通知を伴うAPI
end

ここではジョブのキューイングだけを確認するだけで良さそうです.

キューイングされたジョブの個数を取得する場合はこんな感じです!

XXXXWorker.jobs.size 

よくできてますよね...感動しました.

必死に

envがdevのdockerコンテナを落とす => envをtestに設定して立ち上げ直す => テストが終わったらまたenvがdevのものを立ち上げる

とかそういうのを試行錯誤していました...

参考

github.com