Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby: RSpec::Retryで失敗したテストをRetryさせるMEMO

個人で作成しているライブラリで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です💎

github.com

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

上記の設定は、私が個人のライブラリで設定したものです。設定値の詳細は以下をご確認ください。

github.com

おわりに

本来だったら、そもそも落ちないように出来ると良いのですがCIの実行時間が長時間化してくると全リトライしていると辛くなってきそうなので、こういうGemを入れて該当のテストだけリトライするようにするというのもありかもしれないですね。 ※あとRSpec::Retryはあまりアクティブじゃなさそうだったので、もっと他のよく使われているGemがあるかもですが🤔

参考

hai3.net