ruby:无法使用带有rspec的记录器

non*_*ing 2 ruby logging rspec

我正在尝试将日志记录添加到简单的rspec测试中.我正在使用Watir在规范中驱动Chrome,这很好用.我无法使用"Logger"库获取日志.

这是我的规格:

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
Run Code Online (Sandbox Code Playgroud)

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

Failures:

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

为什么这会失败?这是范围问题吗?如果我注释掉log.info规格运行正常.我可以在示例中使用"浏览器"对象上的任何方法(例如,对browser.text_field的调用)没有问题.

我哪里错了?

Ami*_*pta 6

loglet(:log) { }块内最后评估的内容,即Logger::DEBUG.这个常量只对应于Fixnum0,并且没有info为0 调用的方法.试试这个:

let(:log) { 
  Logger.new(STDOUT).tap { |l| l.level = Logger::DEBUG }
}
Run Code Online (Sandbox Code Playgroud)

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