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

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

$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ってメソッドの決定は下から探しにいくからなのかなぁ。うーん。