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.
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
Die Syntax für RUBYOPT
lautet
RUBYOPT="-W0" rspec
Getestet in Ruby 2.1.x und 2.14.x
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
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
rspec hat eine Tag-Option, die Sie verwenden können - ich habe einfach/dev/null verwendet.
rspec spec --deprecation-out /dev/null
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)
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.