1

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

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

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

4

2 回答 2

4

GlobalLog您的spec_helper.rb.

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

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

于 2013-10-11T12:32:25.787 回答
1

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

before(:each)
  GlobalLog.stub(:debug)
end
于 2013-10-04T09:05:41.273 回答