如何在rspec示例中删除全局日志记录功能

时间:2013-10-04 07:38:12

标签: ruby unit-testing rspec code-cleanup

我正在处理一些记录到全局静态日志记录类的代码,例如:

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

这会堵塞我的测试输出,所以我想避免警告。有干净的解决方案吗?

2 个答案:

答案 0 :(得分:4)

GlobalLog中定义spec_helper.rb

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

如果你想要更清洁,可以把它扔进spec/support

答案 1 :(得分:1)

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

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