概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Ruby on Rails / RSpec - fix randomly failing tests easily
- 原文公開日: 2018/02/21
- 著者: Paweł Dąbrowsk
Rails tips: ランダムにコケるRSpecテストの修正に便利なbisect(翻訳)
テストを書いていて一番ムカつくことのひとつは、テストが失敗したりしなかったりすることです。えてしてこういうspecは、development環境ではコケないくせにCIでコケたりします。CIがよくわからない方はWikipediaの継続的インテグレーションか、Travis CIやCircle CIといったサービスをチェックしてください。
ランダムに失敗するspecのデバッグには時間がかかります。最初にspecの問題を再現できる実行手順を特定してから、次にその問題を修正します。RSpecは問題の修正そのものについては無力ですが、失敗するシナリオを再現する順序を見つけることについては支援が可能です。これを行うには、RSpecを実行するときに--bisect
フラグを付けます。
bundle exec rspec spec/controllers --bisect
--bisect
フラグはRSpecバージョン3.3から利用できます。
これで次のような出力を得られます。
Bisect started using options: "spec/controllers"
Running suite to find failures... (3.37 seconds)
Starting bisect with 2 failing examples and 5 non-failing examples.
Checking that failure(s) are order-dependent... failure(s) do not require any non-failures to run first
Bisect complete! Reduced necessary non-failing examples from 5 to 0 in 3.25 seconds.
The minimal reproduction command is:
rspec ./spec/controllers/contacts_controller_spec.rb[1:2:2,1:2:3]
この出力には、ランダムに失敗するspecを再現するときに行うべきことが示されています。その後の問題の修正は自分でやることになります。
RSpec & TDDの電子書籍を無料でダウンロード
もっと稼ぎたい方や会社をさらに発展させたい方へ: テスティングのスキルの重要性にお気づきでしょうか?テストを正しく書き始めることが、唯一のファーストステップです。無料でダウンロードいただける私の書籍『RSpec & Test Driven Developmentの無料ebook』をどうぞお役立てください。