【问题标题】:ruby: unable to use logger with rspecruby:无法将记录器与 rspec 一起使用
【发布时间】:2013-04-26 08:36:43
【问题描述】:

我正在尝试将日志记录添加到一个简单的 rspec 测试中。我正在使用 Watir 在规范内驱动 Chrome,这工作正常。我无法使用“记录器”库获取日志。

这是我的规格:

require 'rubygems'
require 'watir-webdriver'
require 'rspec'
require 'logger'

describe 'ui tests' do
  let(:browser) { browser ||= Watir::Browser.new :chrome }

  let(:log) {
    log = Logger.new(STDOUT)
    log = Logger.new('watir.tests.log', 'daily')
    log.level = Logger::DEBUG
  }

  before {
    browser.goto 'http://translate.google.com'
  }
  after { browser.close }

  context 'simple tests' do
    it 'simple test' do
      log.info("Running simple test")
      browser.text_field(:id => "source").set("ost")

      # actual test/asserts here

    end
  end
end

问题是我无法在示例中调用任何日志记录方法,例如 log.info。我收到此错误:

Failures:

  1) ui tests simple tests simple test
Failure/Error: log.info("Running simple test")
NoMethodError:
  undefined method `info' for 0:Fixnum

为什么会失败?是范围问题吗?如果我注释掉 log.info 规范运行良好。我可以在示例中的“浏览器”对象上使用任何方法(例如,对 browser.text_field 的调用)而不会出现问题。

我哪里出错了?

【问题讨论】:

  • 您的 let(:log) 块不返回 Logger 实例。只需在结束 } 之前添加一行 log

标签: ruby logging rspec


【解决方案1】:

log 的值是在let(:log) { } 块内评估的最后一个值,即Logger::DEBUG。这个常量只对应于Fixnum 0,并且没有为0 调用info 的方法。试试这个吧:

let(:log) { 
  Logger.new(STDOUT).tap { |l| l.level = Logger::DEBUG }
}

顺便问一下,设置log = Logger.new(STDOUT) 然后立即重新分配log = Logger.new('watir.tests.log', 'daily') 做什么?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2016-01-25
  • 2021-06-16
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
相关资源
最近更新 更多