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

标签 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

不幸的是,因为在每个示例之后都会清除 double ,所以这是不允许的:

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

如果我将 before(:all) 更改为 before(:each),代码可以运行,但我会收到警告:

warning: already initialized constant GlobalLog

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

最佳答案

在您的 spec_helper.rb 中定义一次 GlobalLog

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

如果你想让它更干净,你可以把它放在 spec/support 中。

关于ruby - 如何在 rspec 示例中删除全局日志记录功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19175823/

相关文章:

ruby - URI.unescape 在尝试将 "%C3%9Fą"转换为 "ßą"时崩溃

java - Rails 模型实例变量未在模型类中声明

Javascript 单元测试和重构(使用 Angular js 框架)

rspec - 如何在 rspec 中抑制警告 "removing ` 初始化'可能会导致严重问题”?

testing - 如何将参数发送到 FactoryGirl 特征?

ruby 方法将哈希值转换为字符串

ruby - Jekyll:尽管安装了最新版本,但命令未发现问题

angularjs - Jest Ionic 测试失败 - 意外的 token 导入

java - 模拟 UIInput 类进行测试

ruby - 对如何使用模拟和 stub 感到困惑