Je cherche un moyen de supprimer les avertissements Ruby lorsque je lance mes spécifications.
spec spec/models/account_spec.rb
Je reçois des avertissements tels que:
DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ...
warning: already initialized constant SOME_CONSTANT_NAME
Supprimer l’avertissement ActiveSupport
est assez facile avec ActiveSupport::Deprecation.silenced = true
.
Comment puis-je empêcher les avertissements constants déjà initialisés dans le cadre de ma commande spec
? Ou en créant un autre fichier spec
pouvant supprimer de tels avertissements. N'oubliez pas que ces avertissements proviennent de fichiers gem, par conséquent, je ne peux pas entrer dans ces fichiers et les entourer de Kernel.silence_warnings
.
Remarque: .__ Je comprends que la suppression des avertissements est mauvaise. Cependant, lorsque je lance une seule spec
à partir de vim
, ce serait bien si les avertissements ne surchargent pas mon écran.
Si vous exécutez vos spécifications directement à l'aide de la commande Ruby au lieu du wrapper de spécification, vous pouvez utiliser l'option de ligne de commande -W pour désactiver les avertissements:
$ Ruby --help
[...]
-W[level] set warning level; 0=silence, 1=medium, 2=verbose (default)
Donc dans votre cas:
$ Ruby -W0 -Ispec spec/models/event_spec.rb
ne devrait vous montrer aucun avertissement.
Vous pouvez également définir $ VERBOSE = nil avant le chargement de vos pierres précieuses, c'est-à-dire en haut de votre environment.rb (ou application.rb si vous êtes sur Rails 3). Notez que cela désactive tous les avertissements tout le temps.
Ou, puisque vous utilisez Rails, vous devriez pouvoir utiliser Kernel.silence_warnings autour du bloc Bundler.require si vous utilisez Bundler:
Kernel.silence_warnings do
Bundler.require(:default, Rails.env) if defined?(Bundler)
end
De manière plus sélective, définissez $ VERBOSE uniquement pour le chargement de gemmes spécifiques:
config.gem 'wellbehaving_gem'
original_verbosity = $VERBOSE
$VERBOSE = nil
config.gem 'noisy_gem_a'
$VERBOSE = original_verbosity
La syntaxe pour RUBYOPT
est la suivante:
RUBYOPT="-W0" rspec
Testé en Ruby 2.1.x et 2.14.x
Vous pouvez également utiliser la variable d'environnement "RUBYOPT" pour passer -W0 à rspec:
RUBYOPT=W0 rspec spec/models/event_spec.rb
Cela vous permet d'exécuter plusieurs spécifications en passant dans un répertoire.
RUBYOPT=W0 rspec spec/models
En relation avec ce post , vous pouvez gérer les avertissements de dépréciation en fonction de l’environnement dans lequel vous travaillez, comme indiqué dans Guides Rails :
active_support.deprecation_behavior Configure le rapport de dépréciation pour environnements par défaut, : log pour développement, : notify pour production et : stderr pour test. Si aucune valeur n'est définie pour config.active_support.deprecation, cet initialiseur affichera alors Invite l'utilisateur de configurer cette ligne dans l'environnement actuel config/environnements fichier. Peut être défini sur un tableau de valeurs.
Il suffit donc de changer dans config/environments/test.rb
la valeur : stderr pour : log
Rails.application.configure do
...
# Print deprecation notices to the stderr.
config.active_support.deprecation = :log
...
end
Et avec cela l'avertissement depecation sera dans le log/test.log
à la place de la sortie de la console
rspec a une option de tag que vous pouvez utiliser - j'ai simplement utilisé/dev/null.
rspec spec --deprecation-out /dev/null
Si vous avez cela dans votre fichier .rspec
, supprimez
--warnings
à partir de votre fichier .rspec
à la racine de votre projet.
En fait, vous ne devriez peut-être pas ignorer vos avertissements, mais les tester pour vous assurer qu'ils sont renvoyés là où ils sont censés être.
Ce n'est pas le plus facile à utiliser, mais cela ressemble à ceci:
obj.should_receive(:warn).with("Some Message")
Je l'ai trouvé ici , et l'ai testé pour mon cas d'utilisation, et cela fonctionne (et les avertissements disparaissent de la console, bien sûr)