我正在处理一些记录到全局静态日志记录类的代码,例如:
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
这会堵塞我的测试输出,所以我想避免警告。有干净的解决方案吗?
答案 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