rspecで遅いテストを表示する

$ rake spec --profile 20

上位20件が表示される。

Top 20 slowest examples (93.93 seconds, 36.6% of total time):
  Admin::Categories POST create 子カテゴリとして作成する時 work!  
    13.09 seconds ./spec/requests/admin/categories_spec.rb:127
  Admin::Categories POST create 親カテゴリとして作成する時 work!  
    12.67 seconds ./spec/requests/admin/categories_spec.rb:109
  Admin::Categories POST create 子カテゴリとして作成する時 子カテゴリとして作成されていること
    9.24 seconds ./spec/requests/admin/categories_spec.rb:135
  Admin::Categories GET edit カテゴリ情報 カテゴリが子の場合 編集ができること
    8.67 seconds ./spec/requests/admin/categories_spec.rb:76
  Admin::Categories GET index work!
....

テストの時にスタブで標準出力を黙らせる

メソッド内にインジゲータ感覚で標準出力になんらかの文字を出力しているのって結構あると思う。
でもテストを実行すると実行結果に、そのインジゲータの文字が出力されるのがすごください。
その悩み、スタブで解決。

$stdout.stub(:puts).and_return(nil)

これでおk。
ちなみにwarningのメッセージは相変わらず出力されてた。
(でもpryも黙ってしまった...)

以下余談

これではstubにならなかった。なぜだろう。

Kernel.stub(:puts).and_return(nil)

$stdoutってなんだろう。

$stdout.class # => IO

putsの場所を調べたらKernelにあるってって書いてるよ。

self.method(:puts)  # => #<Method: Object(Kernel)#p>

rubyってメソッドの決定は下から探しにいくからなのかなぁ。うーん。