バッチ処理などでsystemを使って処理をしているのですが、その際に処理中のメッセージなどが標準エラー出力に出力されます。
バッチ処理中にはそういったログが残って欲しいのですがrspec中に出力されるとテスト結果が長くなり邪魔です。
というわけで、rspecでsystemを実行する際にオプションにmergeして対応しました。
before(:each) do
original_system = Object.method(:system)
allow_any_instance_of(Object).to receive(:system) { | *args |
option = {:out => "/dev/null", :err=>"/dev/null"}
if args.last.is_a? Hash
option = args.pop.merge(option)
end
original_system.call(args.last, option)
}
end