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をやる前に知っておきたかったこと

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ