RSpec是否将$ VERBOSE从true更改为false?

时间:2015-05-25 02:35:29

标签: ruby rspec environment-variables warnings rspec3

我使用的是Ruby 2.1.0p0,Rails 3.2.17,RSpec 3.0.0.beta2版。

如果我这样做

export RUBYOPT="-w"

bundle exec ruby dummy_code.rb表示$VERBOSE为真,但bundle exec rspec dummy_spec.rb表示$VERBOSE为假。

我可以通过使用$VERBOSE选项运行rspec来使--warnings成为真,但我认为RSpec不会覆盖警告发生的情况,除非我明确要求它这样做。< / p>

我在spec/spec_helper.rbconfig/environments/test.rb.rspec中看到的任何内容似乎都没有配置警告。

RSpec会将$VERBOSE从true更改为false吗?

dummy_code.rb:

puts "*" * 50
puts $VERBOSE
puts "*" * 50

dummy_spec.rb

describe 'Stuff' do
  it 'does not do much' do
    puts "*" * 50
    puts $VERBOSE
    puts "*" * 50
  end
end

1 个答案:

答案 0 :(得分:0)

RSpec(至少在3.2.0版本中)仅在您使用warnings配置选项时设置$ VERBOSE,但您可能在某处获得了某些代码或首选项文件设置warnings=false

通过一些侦探工作和Ruby的跟踪钩子,您可以缩小查看范围。 Ruby没有为设置全局变量提供跟踪挂钩,但您可以通过检查每个事件的值来近似它:

set_trace_func proc do |event, file, line, id, binding, classname|
  raise RuntimeError, "Verbose was unset", "#{file}:#{line}" unless $VERBOSE
end

堆栈跟踪有望足以找到它,或者你可以通过跟踪功能的内容更加聪明。