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