Suprime las advertencias de Ruby cuando se ejecutan las especificaciones

Estoy buscando una manera de suprimir las advertencias de Ruby cuando ejecuto mis especificaciones.

spec spec/models/account_spec.rb 

Recibo advertencias tales como:

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

La eliminación de la advertencia de ActiveSupport es bastante fácil con ActiveSupport::Deprecation.silenced = true .

¿Cómo evito las advertencias constantes ya inicializadas como parte de mi comando spec ? O mediante la creación de otro archivo de spec que pueda suprimir tales advertencias. Tenga en cuenta que estas advertencias provienen de archivos gem, por lo tanto, no puedo entrar en esos archivos y rodearlos con Kernel.silence_warnings .

Nota: Entiendo que las advertencias de supresión son malas. Sin embargo, cuando ejecuto una única spec dentro de vim , sería bueno que las advertencias no abarroten mi pantalla.

Si ejecuta sus especificaciones directamente con el comando ruby ​​en lugar del contenedor de especificaciones, puede usar la opción de línea de comando -W para silenciar las advertencias:

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

Entonces en tu caso:

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

no debería mostrar ninguna advertencia.

Alternativamente, puede establecer $ VERBOSE = nil antes de cargar sus gems, es decir, en la parte superior de su environment.rb (o application.rb si está en Rails 3). Tenga en cuenta que esto desactiva todas las advertencias todo el tiempo.

O bien, dado que está utilizando Rails, debería poder utilizar Kernel.silence_warnings en el bloque Bundler.require si está utilizando Bundler:

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

De forma más selectiva, configure $ VERBOSE solo para cargar gems específicas:

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

La syntax para RUBYOPT es

 RUBYOPT="-W0" rspec 

Probado en ruby ​​2.1.xy 2.14.x

También puede usar la variable de entorno “RUBYOPT” para pasar -W0 a rspec:

 RUBYOPT=W0 rspec spec/models/event_spec.rb 

Esto le permite ejecutar múltiples especificaciones pasando en un directorio

 RUBYOPT=W0 rspec spec/models 

Relacionado con esta publicación , puede administrar advertencias de desactivación de acuerdo con el entorno en el que está trabajando, como se indica en las guías de Rails :

active_support.deprecation_behavior Configura informes de obsolescencia para entornos, por defecto a : log para desarrollo , notificar para producción y stderr para prueba . Si no se establece un valor para config.active_support.deprecation, este inicializador solicitará al usuario que configure esta línea en el archivo de configuración / entornos del entorno actual. Se puede establecer en una matriz de valores.

Así que simplemente cambie en config/environments/test.rb el valor : stderr para : log

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

Y con esto, la advertencia de desconexión estará en el log/test.log en lugar de en la salida de la consola

En realidad, tal vez no deberías ignorar tus advertencias, sino probarlas, para asegurarte de que son despedidas donde se supone que deben estar.

No es el más fácil de usar, pero se ve así:

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

Lo encontré aquí y lo probé para mi caso de uso, y funciona (y las advertencias desaparecen de la consola, por supuesto)


rspec tiene una opción de etiqueta que puedes usar; simplemente utilicé / dev / null.

 rspec spec --deprecation-out /dev/null 

retirar

 --warnings 

desde su archivo .rspec en la raíz de su proyecto.