2016-11-11 83 views
4

我有一个非rails ruby​​应用程序,它使用记录器来处理日志输出到标准输出。
我想添加检查输出的规格,并找到两种方法来实现这一点,似乎两种方式都不起作用。Rspec无法检查记录器信息输出

所以两种方法都在此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 

我必须输出与日志信息终端,但两者都验证失败

回答

2

我通常只是用双打是这样的:

describe 'logging' do 
    it 'handles output' do 
    logger = double('logger') 
    allow(Logger).to receive(:new).and_return(logger) 

    run_some_code 
    expect(logger).to receive(:info).with("Hello") 
    end 
end 
+0

看起来像一个非常简单的解决方法,我很难理解它是如何工作的。我希望有一个更好的方法 – ShockwaveNN

+2

好吧,你不需要测试记录器类是否真的在做它的工作,你只是想确保你使用的记录器类正在输出你的特定信息。这是做IMO的最好方法。 – Anthony

+0

@Anthony,如果你继承'Logger'并覆盖'info',像我一样?那么你需要测试它,否则你的测试覆盖率将不会是100%。 –