2010年11月27日土曜日

【翻訳】RSpecでテストが失敗したら即停止して結果を出力

Jeff Kreeftmeijerさんの "Making RSpec stop operation immediately after failing" を翻訳しました。
元記事はこちら: http://jeffkreeftmeijer.com/2010/making-rspec-stop-operation-immediately-after-failing/
(翻訳の公開と画像の利用は本人より許諾済みです)

Jeffさんのその次のRSpecの記事もよろしければどうぞ。
 【翻訳】Fuubar: instafailing な RSpec プログレスバーフォーマッタ

翻訳の間違い等があればブログコメントやTwitterなどで遠慮無くご指摘ください。

RSpecでテストが失敗したら
即停止して結果を出力


 RSpec で全てのテストスイートを走らせていて、最初か二番目で spec が失敗したと想像してみて欲しい。その後も走る spec が約200は残っているが、あなたはすぐにでも最初の失敗を修正するのに没頭したい。あなたは多分、それらを修正するための failure の詳細を知るために、spec の実行に割り込もうとするはずだ、そうだろう?

ほとんどの時間こうして作業しているわけだが(Selenium を使っている時、なんらかの問題で実行に割込みをかけるだろう)、もし RSpec が最初の failure で自動的に停止し結果を出力してくれたらすごくないだろうか?



rspec-users グループの3年前のスレッド以外には、役立つデータはほとんど見つからなかったので、私自身で書き始めることにした。

Fail-Fast


 私は RSpec のソースを捜索し始め、そして偶然にも Relish により生成された RSpec のドキュメントを見つけた。そこでは、rspec-core 2.0.0.rc から fail_fast の設定オプションが導入されていることがわかった。それはまさに私が達成したかったことをやってくれる。

この fail_fast オプションは、spec が最初に失敗したときに RSpec をすぐさま停止させて failure の詳細を出力し、spec の失敗を修正するのにいい感じに速度を加速させてくれる。使い方は極々簡単だ:

# spec/spec_helper.rb

RSpec.configure do |c|
  c.fail_fast = true
end

コマンドラインサポート


あなたは時々 fail_fast オプションをなしにして、テストスイート全体を走らせたいとも思っているだろうが、spec/spec_helper.rb に現実にはいいオプションが存在しない。だから私は、あなたがいつでもそれをしたい時に出来るよう、コマンドラインオプションを追加した:

$ bundle exec rspec spec/ --fail-fast
.F

Failures:
  1) Swinger should set the Capybara driver
     Failure/Error: Capybara.current_driver.should_not == :rack_test

Finished in 0.00479 seconds
2 examples, 1 failure

この --fail-fast オプションは、先日リリースされた RSpec 2.1 にのみ含まれているので、アップデートを忘れないように。


0 件のコメント:

コメントを投稿

フォロワー