我试图写一个RSpec测试,确认在出现问题时会向stderr发送错误消息。我的解决方案是将stderr输出到文件:
$stderr = File.new(File.join(@output_path, 'stderr.txt'), 'w')
最后,当我的测试导致错误发生时,stderr.txt文件包含此字符串:
envelope_evaluation.rb: Could not initialize variables
但是,当我尝试通过这一行从stderr.txt中提取这个字符串时:
contents = IO.read("#{@output_path}/stderr.txt")
内容变量始终为空。我错过了IO步骤吗?
NEW EDIT
在下面的讨论之后,我已经清理了一些代码,但我仍然遇到空字符串结果。当我将$ stderr重定向到我的错误文件时,我现在正在读/写模式下执行:
$stderr = File.new("#{@output_path}/stderr.txt", 'w+')
之后,我的envelope_evaluation.rb脚本执行,并且stderr.txt文件填充了错误消息。由于$ stderr现在具有读取权限,因此我通过以下方式获取其内容:
$stderr.flush
contents = $stderr.read
不幸的是'内容'变量仍然是空的。