個人で作成しているライブラリでDBのDocker Imageのbuild直後だけ、たまにコネクションが作れなくてエラーになる事象が発生し以下のRspec::Retry
を導入してリトライして解消したので導入方法をメモしておきます📝
Rspec::Retry
とは?
RSpec::Retry adds a :retry option for intermittently failing rspec examples. If an example has the :retry option, rspec will retry the example the specified number of times until the example succeeds.
上記の通り、RSpecでテストが落ちた際にリトライ回数や待ち時間等、いろんなオプションを付与してリトライすることが出来るgemです💎
Rspec::Retry
の導入方法
Gemfileに以下を追加し、bundle install
を実行します。
gem 'rspec-retry', group: :test
その後、spec_helper.rb
に任意のリトライ設定を行います⚙
require 'rspec/retry' RSpec.configure do |config| # for RSpec::Retry config.verbose_retry = true # リトライ状況を表示 config.display_try_failure_messages = true # リトライを実行した理由(例外)を表示 config.around { |ex| ex.run_with_retry(retry: 3, retry_wait: 1) } # 最大3回リトライ(実行時に1秒待つ) end
上記の設定は、私が個人のライブラリで設定したものです。設定値の詳細は以下をご確認ください。
おわりに
本来だったら、そもそも落ちないように出来ると良いのですがCIの実行時間が長時間化してくると全リトライしていると辛くなってきそうなので、こういうGemを入れて該当のテストだけリトライするようにするというのもありかもしれないですね。
※あとRSpec::Retry
はあまりアクティブじゃなさそうだったので、もっと他のよく使われているGemがあるかもですが🤔