outputマッチャーを使うことで標準出力をテストすることができます。
RSpec.describe "output.to_stdout matcher" do # 出力されることを確かめられれば十分な場合はこう specify { expect { print('foo') }.to output.to_stdout } # 出力内容まで確認したい場合はこう specify { expect { print('foo') }.to output('foo').to_stdout } end
自作gemで出力のテストをしたかったのでこういうコードを書いてみました。
describe "#put_best_strategy" do it do expect do example_procsy.put_best_strategy(:build) end.to output(/#{example_instance.location} create can be replaced to build/).to_stdout end end
簡易的だけど「ないよりはいい」みたいなテストではあります。これから実装を肉付けしていきながらテストも充実させておきたい。
Railsアプリを書いているとこのマッチャーはあまり使わない気がしますがどうなんでしょう。Railsアプリ上で自前で標準出力に何かを出力させることはあるけど自分がやったことがあるのはテンポラリーな処理の場合かも(デバッグとか)。 そんなわけで「標準出力に出力されていることとその出力内容をテストしたい!」という動機が生まれたのが初めてかもしれないです。簡単でもいいので自分のコードを書くというのは、やる前には知らなかった欲求が生まれるのが楽しい。
上に貼った公式リファレンスに書いてあるように、標準出力だけでなく標準エラー出力もテストすることができるので、そういうテストを書く場面になったら使ってみようと思います。