Tech Racho エンジニアの「?」を「!」に。
  • 開発

Rails tips: ランダムにコケるRSpecテストの修正に便利なbisect(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Rails tips: ランダムにコケるRSpecテストの修正に便利なbisect(翻訳)

テストを書いていて一番ムカつくことのひとつは、テストが失敗したりしなかったりすることです。えてしてこういうspecは、development環境ではコケないくせにCIでコケたりします。CIがよくわからない方はWikipediaの継続的インテグレーションか、Travis CICircle 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』をどうぞお役立てください。

関連記事

Jenkinsで特定のプロジェクトだけ閲覧できるユーザを作成するには

[Rails] RSpecをやる前に知っておきたかったこと


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。