ruby:无法使用带有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
问题是我无法在示例中调用任何日志记录方法,例如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的调用)没有问题。
我哪里错了?
log
的值是let(:log) { }
块内的最后一个值,它是Logger::DEBUG
。 这个常量只对应于Fixnum
0,并且没有名为info
for 0的方法。试试这个:
let(:log) { Logger.new(STDOUT).tap { |l| l.level = Logger::DEBUG } }
顺便说一句,你要设置log = Logger.new(STDOUT)
然后立即重新分配log = Logger.new('watir.tests.log', 'daily')
?