RSpecで、featureのテストを書いていたときに、ActiveJobにファイルの生成を依頼して、生成できたらファイルをダウンロードするような処理を書いていたときに、ActiveJobが動いていなくてエラーになったので、どうやったらActiveJobをfeature specを実行中に動かせるかを調査した。
解決策
ActiveJobを即時実行する設定にすればよい
実は、参考になる記事がすでにQiitaに書かれていた。
RSpec でキューイングした ActiveJob を同期実行する
この通りにすればできた。非常にありがたい情報だった
別の解決策
上記の解決策でできたのだけれど、やはり冗長な感じがした。
もっとシンプルにしたいと思ったので、自分はshared_contextを利用する方式に変更した。
spec/support/perform_enqueued_jobs.rb
shared_context :perform_enqueued_jobs do
around :each do |example|
perform_enqueued_jobs { example.run }
end
end
テスト側で、ActiveJobを使うfeatureのテストの場合は、include_contextを使う。
spec/features/foo_spec.rb
feature 'foo' do
include_context :perform_enqueued_jobs
scenario 'ActiveJobを使うシナリオ' do
# なにかしらの操作
end
end
こちらのほうが変更点も少なくてシンプルじゃないかなと思う