2014-05-28 13:43:27 +0900
ActiveSupportのKernel#capture
とKernel#silence
。
ActiveSupportにはKernel#captureというメソッドとそのエイリアスであるsilence
が定義されていて、以下のようにストリームへの出力を横取りできる。
stream = capture(:stdout) { puts 'notice' }
stream # => "notice\n"
silence(:stderr) { ... }
これまでは標準出力などに出力を行うクラスをテストする際に、このメソッドで出力を抑止していたが、RSpec 3.0からはoutputマッチャーを使うと、同様のことが以下のように記述できる。
expect { puts 'notice' }.to output("notice\n").to_stdout
今後は、出力内容をテストしたい場合はoutput
マッチャーを使い、単に出力を抑止したい場合はKernel#silence
という使い分けになりそう。