テスト用に Ruby Logger 出力をキャプチャする
概要
次のような Ruby クラスがあります。
require 'logger'
class T
def do_something
log = Logger.new(STDERR)
log.info("Here is an info message")
end
end
そして、テストスクリプトには次のような行があります。
#!/usr/bin/env ruby
gem "minitest"
require 'minitest/autorun'
require_relative 't'
class TestMailProcessorClasses < Minitest::Test
def test_it
me = T.new
out, err = capture_io do
me.do_something
end
puts "Out is '#{out}'"
puts "err is '#{err}'"
end
end
このテストを実行すると、out と err の両方が空の文字列になります。 (端末上の) stderr にメッセージが出力されているのがわかります。 Logger と Capture_io をうまく連携させる方法はありますか?
私は Ruby on Rails ではなく、ストレートな Ruby 環境にいます。
解決策
魔法は、capture_subprocess_io を使用することです
out, err = capture_subprocess_io do
do_stuff
end