gpt4 book ai didi

ruby - 在 ruby​​ 中,如何使用 puts 和实例变量捕获 stdout。我需要使用实例变量来通过 rspec 测试

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:19 26 4
gpt4 key购买 nike

为了清晰起见,从我的项目中提取相关代码片段到一个小型独立测试模块......

require "stringio"  

@output = $stdout
$buffer = StringIO.new
$stdout = $buffer

@output.puts "puts method to buffer text"
$stdout = STDOUT

$buffer.rewind
puts "buffer contents: #{$buffer.read}"

运行这段代码,返回一个空缓冲区。我必须使用 @output.puts 来通过 rspec @output(:puts) should_receive rspec 测试。如果我将 @output.puts 替换为简单的“puts”,则缓冲区已填充但 rspec 测试失败。

我已经搜索了几个小时的各种在线 ruby​​ 资源,无法使用任何内容来回答这个问题。非常感谢收到任何帮助。

最佳答案

好的。最后的简单错误。

首先,插入一个

$buffer.write

line 表示我实际上正在写入缓冲区,所以它不是空的!

其次,

@output.puts("string")

实际上并没有将字符串内容分配给@output,只是将其用作输出 channel

$buffer.write(@output) 

只是将十六进制字符而不是我的字符串写入缓冲区。

所以我必须显式地写入字符串或将其分配给变量,即

@output="string"
$buffer.write(@output)

将字符串写入缓冲区。

感谢所有让我以正确的方式研究/思考的回复 - 向前和向上。

关于ruby - 在 ruby​​ 中,如何使用 puts 和实例变量捕获 stdout。我需要使用实例变量来通过 rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com