【发布时间】:2023-03-26 03:40:01
【问题描述】:
我正在测试一个生成器,它会向 STDOUT 输出很多东西。我想压制这个,对此有很多答案。
但我希望仍然能够使用 pry。现在,如果我需要进入测试状态,我必须禁用抑制。
我正在使用此代码。它完全绕过了 pry:
def suppress_output(&block)
@original_stderr = $stderr
@original_stdout = $stdout
$stderr = $stdout = StringIO.new
yield(block)
$stderr = @original_stderr
$stdout = @original_stdout
@original_stderr = nil
@original_stdout = nil
end
我用这个代替了它。它停在撬动处,但继续抑制输出,因此您无能为力:
def suppress_output(&block)
orig_stderr = $stderr.clone
orig_stdout = $stdout.clone
$stderr.reopen File.new("/dev/null", "w")
$stdout.reopen File.new("/dev/null", "w")
yield(block)
rescue Exception => e
$stdout.reopen orig_stdout
$stderr.reopen orig_stderr
raise e
ensure
$stdout.reopen orig_stdout
$stderr.reopen orig_stderr
end
有什么方法可以让我的蛋糕也吃吗?
【问题讨论】:
-
您可以从 pry 会话中调用的另一种方法
enable_output怎么样? -
这仍然是一种令人讨厌的解决方法。在这种情况下,由于我使用的库,我意识到最好的解决方案是更改代码,而不是测试设置。