私は仕様を実行するときにRuby警告を抑制する方法を探しています。
spec spec/models/account_spec.rb
次のような警告が表示されます。
DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ...
warning: already initialized constant SOME_CONSTANT_NAME
ActiveSupport
警告の削除は、ActiveSupport::Deprecation.silenced = true
を使用すると非常に簡単です。
spec
コマンドの一部として既に初期化された定数警告を防ぐにはどうすればよいですか?または、そのような警告を抑制することができる別のspec
ファイルを作成することにより。これらの警告はgemファイルからのものであるため、これらのファイルに移動してKernel.silence_warnings
で囲むことはできません。
注:警告の抑制は悪いことを理解しています。ただし、spec
内からvim
を1つ実行すると、警告によって画面が乱雑にならないのは素晴らしいことです。
仕様ラッパーの代わりにRubyコマンドで仕様を直接実行する場合は、-Wコマンドラインオプションを使用して警告を消すことができます。
$ Ruby --help
[...]
-W[level] set warning level; 0=silence, 1=medium, 2=verbose (default)
あなたの場合:
$ Ruby -W0 -Ispec spec/models/event_spec.rb
警告を表示しないでください。
または、gemをロードする前に、つまり、environment.rb(またはRails 3)を使用している場合はapplication.rb)の先頭に$ VERBOSE = nilを設定できます。すべての警告を常に無効にします。
または、Railsを使用しているため、Bundlerを使用している場合は、Bundler.requireブロックの周りでKernel.silence_warningsを使用できるはずです。
Kernel.silence_warnings do
Bundler.require(:default, Rails.env) if defined?(Bundler)
end
より選択的に、特定の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
「RUBYOPT」環境変数を使用して、-W0をrspecに渡すこともできます。
RUBYOPT=W0 rspec spec/models/event_spec.rb
これにより、ディレクトリを渡すことで複数の仕様を実行できます
RUBYOPT=W0 rspec spec/models
この post に関連して、 Railsガイドで説明されているように、作業中の環境に応じて非推奨の警告を管理できます :
active_support.deprecation_behavior環境の非推奨レポートを設定します。デフォルトは:log fordevelopment、:notifyforproductionおよび:stderrfortest。 config.active_support.deprecationに値が設定されていない場合、このイニシャライザーは現在の環境のconfig/environmentsファイルでこの行を構成するようユーザーに促します。値の配列に設定できます。
したがって、config/environments/test.rb
値:stderrfor:log
Rails.application.configure do
...
# Print deprecation notices to the log file instead of console.
config.active_support.deprecation = :log
...
end
この変更により、非推奨の警告がlog/test.log
コンソール出力の代わり。
rspecには、使用できるタグオプションがあります。単純に/ dev/nullを使用しました。
rspec spec --deprecation-out /dev/null
.rspec
ファイルにこれがある場合は、削除します
--warnings
プロジェクトルートの.rspec
ファイルから。
実際には、おそらく警告を無視するべきではありませんが、警告をテストして、警告が本来あるべき場所で発生することを確認してください。
使用するのが最も簡単ではありませんが、次のようになります。
obj.should_receive(:warn).with("Some Message")
私 ここで見つけました 、そして私のユースケースのためにそれをテストしました、そしてそれは動作します(そしてもちろん、警告はコンソールから消えます)
私のために働いた唯一の解決策は、私のconfig/environments/test.rbファイルの上に$VERBOSE = nil
を追加することです
Rails.application.configure do
$VERBOSE = nil
偽の警告問題faker-1.9.6/lib/faker/default/number.rb:34
があります。他のすべての警告を隠すため、ローカルで使用します。