Ruby 2.0.0 p0の話かと思った?残念RSpec 2.13.0ちゃんでした!
Changelogを見てたらテンション上がってきたので使ってみました。
subject!
let!のsubject版
通常のsubjectが遅延評価でshouldが呼ばれた時に評価されるのに対し、subject!はbefore(:each)でhookして実行される模様。
戻り値以外で評価するメソッドのテストでitやbefore(:each)に書いていたものは subject! に移動させるとよさげ
--profile
テストの実行時間を計測してくれるのでトップ10を出してくれるスローテストの調査に重宝しそう。
プロファイル結果をJenkinsで集計するプラグインが望まれる。
$ be rspec --profile ............................................................ Top 10 slowest examples (10.58 seconds, 96.4% of total time): AndroidMarket use stub content behaves like android_market_base_examples #get_top_selling_paid_apps_in_category 1.54 seconds ./spec/android_market_spec.rb:83 AndroidMarket use stub content behaves like android_market_base_examples #get_overall_top_grossing_apps 1.38 seconds ./spec/android_market_spec.rb:101 AndroidMarket use stub content behaves like android_market_base_examples #get_top_selling_free_apps_in_category 1.32 seconds ./spec/android_market_spec.rb:77 AndroidMarket use stub content behaves like android_market_base_examples #get_overall_top_selling_new_free_apps 1.25 seconds ./spec/android_market_spec.rb:113 AndroidMarket use stub content behaves like android_market_base_examples #get_overall_top_selling_free_apps 1.24 seconds ./spec/android_market_spec.rb:89 AndroidMarket use stub content behaves like android_market_base_examples #get_overall_top_selling_new_paid_apps 1.24 seconds ./spec/android_market_spec.rb:107 AndroidMarket use stub content behaves like android_market_base_examples #get_overall_top_selling_paid_apps 1.24 seconds ./spec/android_market_spec.rb:95 AndroidMarket use stub content behaves like android_market_base_examples #get_developer_app_list 0.69853 seconds ./spec/android_market_spec.rb:119 AndroidMarket use stub content behaves like android_market_base_examples #get_developer_app_list 0.57257 seconds ./spec/android_market_spec.rb:71 AndroidMarket use stub content behaves like android_market_base_examples #get_overall_top_selling_new_paid_app 0.08922 seconds ./spec/android_market_spec.rb:59
その他
なんか微妙に挙動が変わってる気がする。
before(:all) do @app = very_heavy_method(arg) end let(:arg) { "name" } subject{ @app } its(:field){ should == "value" }
こういう感じのテストを書いてたのですが、2.13.0で落ちるようになりました。
で、いろいろやってたらletを参照してたものを直接 before(:all) 内にベタ書きするようにしたらテストが通るようになりました。謎い。。。*1
https://github.com/drecom/android_market_api/commit/2817f6defefa34ec8c6039c40fd064a654df7571
The RSpec Book (Professional Ruby Series)
- 作者: David Chelimsky,Dave Astels,Zach Dennis,角谷 信太郎,豊田 祐司,株式会社クイープ
- 出版社/メーカー: 翔泳社
- 発売日: 2012/02/22
- メディア: 大型本
- 購入: 7人 クリック: 136回
- この商品を含むブログ (13件) を見る
*1:before(:all)内ではちゃんとletの中身は取れていた