运行规范时禁止Ruby警告

我正在寻找一种方法来抑制Ruby警告,当我运行我的规格。

spec spec/models/account_spec.rb 

我收到警告,如:

 DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ... warning: already initialized constant SOME_CONSTANT_NAME 

使用ActiveSupport::Deprecation.silenced = true删除ActiveSupport警告非常简单。

如何防止已经初始化的常量警告作为我的spec命令的一部分? 或者通过创build另一个可以抑制这种警告的spec文件。 请记住,这些警告来自gem文件,因此我不能进入这些文件并用Kernel.silence_warnings它们Kernel.silence_warnings

注意:我明白禁止警告是不好的。 但是,当我在vim运行单个spec ,如果警告不会让我的屏幕混乱,那将会很好。

如果直接使用ruby命令而不是spec wrapper运行规格,则可以使用-W命令行选项来静默警告:

 $ ruby --help [...] -W[level] set warning level; 0=silence, 1=medium, 2=verbose (default) 

所以在你的情况下:

 $ ruby -W0 -Ispec spec/models/event_spec.rb 

不应该显示任何警告。

或者,您可以在加载gem之前设置$ VERBOSE = nil,即在environment.rb(或者如果您使用Rails 3时为application.rb)。 请注意,这会始终禁用所有警告。

或者,因为您正在使用Rails,所以如果您使用Bundler,则应该可以在Bundler.require块周围使用Kernel.silence_warnings:

 Kernel.silence_warnings do Bundler.require(:default, Rails.env) if defined?(Bundler) end 

更有select地,只为$加载特定的gem$ VERBOSE:

 config.gem 'wellbehaving_gem' original_verbosity = $VERBOSE $VERBOSE = nil config.gem 'noisy_gem_a' $VERBOSE = original_verbosity 

RUBYOPT的语法是

 RUBYOPT="-W0" rspec 

在ruby 2.1.x和2.14.x中testing

你也可以使用“RUBYOPT”环境variables来传递-W0到rspec:

 RUBYOPT=W0 rspec spec/models/event_spec.rb 

这使您可以通过传入目录来运行多个规格

 RUBYOPT=W0 rspec spec/models 

与本文相关,您可以根据您所在的环境来pipe理弃用警告,如导轨指南中所述:

active_support.deprecation_behavior设置环境的弃用报告,默认为:logging 开发:通知 生产:stderr testing 。 如果没有为config.active_support.deprecation设置一个值,那么这个初始化器会提示用户在当前环境的config / environments文件中configuration这一行。 可以设置为一个值的数组。

所以只需在config/environments/test.rb更改值:stderr for :log

 Rails.application.configure do ... # Print deprecation notices to the stderr. config.active_support.deprecation = :log ... end 

而这个depecation警告将会在log/test.log而不是在控制台输出中

实际上,也许你不应该忽视你的警告,而是要testing他们,确保他们被解雇。

这不是最简单的使用,但它看起来像这样:

 obj.should_receive(:warn).with("Some Message") 

我在这里find它 ,并为我的使用情况进行了testing,并且工作正常(当然,警告消失)

去掉

 --warnings 

从您的项目根目录中的.rspec文件。


rspec有一个标签选项,你可以使用 – 我只是使用/ dev / null。

 rspec spec --deprecation-out /dev/null