如何存根出在rspec的例子全局日志记录功能(How to stub out global logg

2019-10-18 18:02发布

我有一些代码,记录到一个全局静态日志类,如工作:

GlobalLog.debug("Some message")

然而,在我的测试中,我不希望有真正的日志,因为它引入了很多不必要的依赖。 所以我想嘲笑一下:

describe "some function" do
  before(:all) do
    log = double('log')
    GlobalLog = log
    log.stub(:debug)
  end
  ...
end

不幸的是,因为双打均例如后被清除出来,这是不允许的:

https://www.relishapp.com/rspec/rspec-mocks/docs/scope

如果我改变了before(:all)before(:each) ,代码工作,但我得到一个警告:

warning: already initialized constant GlobalLog

这是堵塞了我的测试输出,所以我想,以避免该警告。 是否有一个干净的解决方案?

Answer 1:

定义GlobalLog在一次spec_helper.rb

class GlobalLog
  class << self
    [:info, :debug, :warn, :error].each do |method|
      define_method(method) {|*|}
    end
  end
end

你可以把它在spec/support ,如果你想成为它干净。



Answer 2:

你为什么不存根原GlobalLog对象的方法?

before(:each)
  GlobalLog.stub(:debug)
end


文章来源: How to stub out global logging function in rspec examples