Suppress Ruby warnings when running specs

Jey Balachandran picture Jey Balachandran · Apr 8, 2011 · Viewed 50.5k times · Source

I'm looking for a way to suppress Ruby warnings when I run my specs.

spec spec/models/account_spec.rb

I receive warnings such as:

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

Removing the ActiveSupport warning is quite easy with ActiveSupport::Deprecation.silenced = true.

How do I prevent the already initialized constant warnings as part of my spec command? Or through creating another spec file that can suppress such warnings. Keep in mind that these warnings are from gem files, therefore I cannot go into those files and surround them with Kernel.silence_warnings.

Note: I understand that suppressing warnings are bad. However, when I run a single spec from within vim it would be nice if the warnings didn't clutter my screen.

Answer

Jakob S picture Jakob S · Apr 8, 2011

If you run your specs directly with the ruby command instead of the spec wrapper, you can use the -W command line option to silence warnings:

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

So in your case:

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

should not show you any warnings.

Alternatively, you could set $VERBOSE=nil before your gems are loaded, ie at the top of your environment.rb (or application.rb if you're on Rails 3). Note that this disables all warnings all the time.

Or, since you are using Rails, you should be able to use Kernel.silence_warnings around the Bundler.require block if you're using Bundler:

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

More selectively, set $VERBOSE only for loading specific gems:

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