我使用的是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.rb
,config/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
答案 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
堆栈跟踪有望足以找到它,或者你可以通过跟踪功能的内容更加聪明。