跟踪Ruby中的$ stdout / $ stderr

时间:2017-11-21 13:51:52

标签: ruby

我试图测试使用GLI的我的宝石的输出但是我遇到了问题。在我的测试设置中,我将$stdout$stderr重定向到StringIO个实例但是当我运行我的代码时,我仍然会在屏幕上显示一条消息,而不是重定向到我的自定义对象。

begin
  old_stdout, old_stderr, $stdout, $stderr = $stdout, $stderr, StringIO.new, StringIO.new

  @exit_code = described_class.run([command] + command_args)
  @stdout = $stdout.string
  @stderr = $stderr.string
ensure
  $stdout = old_stdout
  $stderror = old_stderr
end

我希望最终调用GLI described_class.run([command] + command_args)方法的exit_now!会被重定向到$stderr但是情况似乎并非如此。

有没有办法去追踪"字符串在哪里/如何打印到屏幕上?

1 个答案:

答案 0 :(得分:0)

您似乎正在使用基于described_class的RSpec。如果您只是尝试测试stdout / stderr,那么就有了匹配。

it "does something" do 
  expect { 
    described_class.run([command] + command_args) 
  }.to output(/some string match/).to_stdout
end

GLI项目的所有者就如何测试GLI设置提出了一些建议here,也许这也有帮助。