web-dev-qa-db-ger.com

Unterdrücken Sie Ruby-Warnungen beim Ausführen von Spezifikationen

Ich suche nach einer Möglichkeit, Ruby-Warnungen zu unterdrücken, wenn ich meine Spezifikationen ausführte.

spec spec/models/account_spec.rb

Ich erhalte Warnungen wie:

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

Das Entfernen der ActiveSupport-Warnung ist mit ActiveSupport::Deprecation.silenced = true ganz einfach.

Wie verhindere ich die bereits initialisierten konstanten Warnungen als Teil meines spec-Befehls? Oder indem Sie eine andere spec-Datei erstellen, die solche Warnungen unterdrücken kann. Denken Sie daran, dass diese Warnungen aus Gem-Dateien stammen. Daher kann ich nicht in diese Dateien gehen und sie mit Kernel.silence_warnings umgeben.

Hinweis: Ich verstehe, dass das Unterdrücken von Warnungen schlecht ist. Wenn ich jedoch eine einzelne spec in vim starte, wäre es nett, wenn die Warnungen meinen Bildschirm nicht stören würden.

39

Wenn Sie Ihre Spezifikationen direkt mit dem Ruby-Befehl anstelle des Spec-Wrappers ausführen, können Sie die Befehlszeilenoption -W verwenden, um Warnungen abzustellen:

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

Also in deinem Fall:

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

sollte keine Warnungen anzeigen.

Alternativ können Sie $ VERBOSE = nil vor dem Laden Ihrer Edelsteine ​​festlegen, dh oben in Ihrer environment.rb (oder application.rb, wenn Sie sich auf Rails 3 befinden). Beachten Sie, dass dadurch alle Warnungen ständig deaktiviert werden.

Da Sie Rails verwenden, sollten Sie in der Lage sein, Kernel.silence_warnings um den Bundler.require-Block zu verwenden, wenn Sie Bundler verwenden:

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

Selektiver: Setzen Sie $ VERBOSE nur zum Laden bestimmter Edelsteine:

config.gem 'wellbehaving_gem'
original_verbosity = $VERBOSE
$VERBOSE = nil
config.gem 'noisy_gem_a'
$VERBOSE = original_verbosity
56
Jakob S

Die Syntax für RUBYOPT lautet

RUBYOPT="-W0" rspec

Getestet in Ruby 2.1.x und 2.14.x

39
Dingle

Sie können auch die Umgebungsvariable "RUBYOPT" verwenden, um -W0 an rspec zu übergeben:

RUBYOPT=W0 rspec spec/models/event_spec.rb

Dadurch können Sie mehrere Spezifikationen ausführen, indem Sie ein Verzeichnis übergeben

RUBYOPT=W0 rspec spec/models
16
Scott Patten

In Verbindung mit diesem post können Sie Abwertungswarnungen entsprechend der Umgebung, in der Sie arbeiten, verwalten, wie in Rails-Anleitungen gesagt:

active_support.deprecation_behavior Legt die Abschreibungsberichte für .__ fest. Umgebungen, standardmäßig : log für development, : notify für production und : stderr für test. Wenn für .__ kein Wert festgelegt ist. config.active_support.deprecation, dann fordert der Initialisierer zur Eingabeaufforderung Der Benutzer kann diese Zeile in der aktuellen Umgebung konfigurieren config/umwelts datei. Kann auf ein Array von Werten gesetzt werden.

Ändern Sie einfach in config/environments/test.rb den Wert : stderr für : log.

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

Und hiermit wird die Depekationswarnung im log/test.log statt in der Konsolenausgabe angezeigt

15
G. I. Joe

rspec hat eine Tag-Option, die Sie verwenden können - ich habe einfach/dev/null verwendet.

rspec spec --deprecation-out /dev/null
2

Wenn Sie dies in Ihrer .rspec-Datei haben, entfernen Sie

--warnings

aus Ihrer .rspec-Datei in Ihrem Projektstammverzeichnis.

Eigentlich sollten Sie Ihre Warnungen vielleicht nicht ignorieren, sondern sie testen, um sicherzustellen, dass sie an der Stelle abgefeuert werden, an der sie sich befinden sollen.

Es ist nicht die einfachste Anwendung, aber es sieht so aus:

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

Ich habe es hier gefunden , und für meinen Anwendungsfall getestet, und es funktioniert (und die Warnungen verschwinden natürlich von der Konsole)

0
Rudy Rigot

Die einzige Lösung, die für mich funktioniert hat, ist das Hinzufügen von $VERBOSE = nil Zu meiner Datei config/surroundings/test.rb

  Rails.application.configure do
   $VERBOSE = nil

Ich habe faker Warnprobleme faker-1.9.6/lib/faker/default/number.rb:34. Verwenden Sie es lokal, da alle anderen Warnungen ausgeblendet werden.