gpt4 book ai didi

ruby - Rspec 无法检查记录器信息输出

转载 作者:数据小太阳 更新时间:2023-10-29 07:31:35 25 4
gpt4 key购买 nike

我有一个非 Rails ruby​​ 应用程序,它使用记录器来处理输出到标准输出的日志。
我想添加用于检查输出的规范,并找到了两种实现方法,但似乎两种方法都不起作用。

所以这两种方式都在这个 spec.rb 文件中:

require 'rspec' 
require 'logger'

describe 'Logger' do
it 'expect to output' do
expect { Logger.new(STDOUT).info('Hello') }.to output.to_stdout
end

it 'expect to recieve' do
expect(Logger.new(STDOUT).info('Hello')).to receive(:info)
end
end

我已将日志消息输出到终端,但两次验证均失败

最佳答案

STDOUT 替换为 $stdout。这有效:

expect { Logger.new($stdout).info('Hello') }.to output.to_stdout

原因是 Rspec 在内部修改全局变量 $stdout 以使用 StringIO 捕获其内容。使用常量时,此机制不起作用,因为 STDOUT 保留 $stdout 的原始值。

请注意,您将遇到类似的问题,即在 block 外初始化记录器。记录器对象将在内部存储原始引用,它不会工作:

logger = Logger.new($stdout)
expect { logger.info('Hello') }.to output.to_stdout # This won't work

根据第二个问题:

expect(Logger.new(STDOUT).info('Hello')).to receive(:info)   

这只是 Rspec 的错误用法。它应该是这样的:

logger = Logger.new(STDOUT)
expect(logger).to receive(:info)
logger.info("Hello")

关于ruby - Rspec 无法检查记录器信息输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40549766/

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