Je mettant la mise à niveau des rails 2 à Rails 3 Application (code non écrit par moi). Le (Code bien testé) utilise le devoir et le test :: unité de test et utilise de manière approfondi les macros 13.Create and dilge_change.
Je comprends de Anaway, existe-t-il un moyen de tourner sélectivement les avertissements de dépréciation des macros spécifiées? Je sais déjà de Cet article sur que vous pouvez éteindre les avertissements de dépréciation dans le Test de râteau de sortie entièrement en paramétrage: p> dans votre fichier d'environnement de test et je sais aussi que vous pouvez mettre des pièces de code spécifiques dans un bloc pour les mettre au silence: P> ActiveSupport::Deprecation.silence do
# no warnings for any use of deprecated methods here
end
4 Réponses :
Je pense avoir trouvé une solution: dans test / test_helper.rb j'ai rouvert le module et écrasé la définition de la macro avec une définition identique, mais l'avertissement de dépréciation a commenté. Il existe probablement beaucoup plus de façons élégantes de le faire si ...
# modif pvh DEPREC # reopen the module and silence the deprecation statement to avoid # having my results overflown by these deprecation warnings... module Shoulda # :nodoc: module Macros def should_create(class_name) ##::ActiveSupport::Deprecation.warn should_change_record_count_of(class_name, 1, 'create') end end end
En fait, j'habille beaucoup d'autres avertissements d'amortissement du code qui se trouvaient dans des plugins ou des gemmes que j'avais installé. Afin d'éviter la majeure partie de cela, j'ai écrasé la dépréciation :: Méthode de l'avertissement dans Test_Helper.rb. Donc, au lieu du code précédent, utilisez:
module ActiveSupport module Deprecation class << self def warn(message = nil, callstack = caller) # modif pvh the following lines make sure no deprecation warnings are sent # for code that is # not by my but in some gem or plugin... return if silenced || callstack.grep(/myrailsappname/).blank? # return if silenced deprecation_message(callstack, message).tap do |m| behavior.each { |b| b.call(m, callstack) } end end end end end
Une ancienne question - mais si vous avez de nouvelles amortissements, vous souhaitez ignorer sélectivement: ceci est pour ActiveSupport 3 . P> P>
Puis-je recommander une alternative?
module ActiveSupport class Deprecation module Reporting # Mute specific deprecation messages def warn(message = nil, callstack = nil) return if message.match(/Automatic updating of counter caches/) super end end end end