2011-02-04 11 views
10

Rails 2 uygulamasına Rails 3 uygulamasını yükseltiyorum (kod yazmıyor). (İyi sınanmış kod), shoulda ve Test :: Unit'i kullanır ve geniş bir biçimde, must_create ve should_change makrolarını kullanır.Rails 3 kullanımdan kaldırma uyarısını seçici olarak nasıl sessize alabilirim?

Ben olmalıydınız sürdürücüler Her iki yöntem kurtulmak istiyorum this discussion anladığımız ama Testi :: Unit kullanan kişilerin gerekli (emin değilim olsa bütün tartışma kavrama am) bulmuyorum söyledi.

Anaway, belirtilen makrolar için kullanımdan kaldırma uyarılarını seçici olarak etkinleştirmenin bir yolu var mı? Test ortamı dosyasında

ActiveSupport::Deprecation.silenced = true 

ve ben de bir bloktaki kod belirli parçalarını koymak biliyoruz: Zaten tamamen ayarlayarak Rake testi çıkışında deprecation uyarıları kapatabilirsiniz o this posting biliyoruz onları susturulmuş almak için:

ActiveSupport::Deprecation.silence do 
# no warnings for any use of deprecated methods here 
end 

ikincisi bir seçenektir ancak tüm testler gidip böyle bir blokta should_create makro içine beni gerektirecektir. Bu yüzden, tamamen tek bir yapılandırma ayarıyla belirli makrolar için uyarıları ortadan kaldırmanın bir yolu olduğunu mu merak ediyordum?

cevap

3

muhtemelen çok daha şık vardır. Bunun çoğunu önlemek için test_helper.rb'deki Deprecation :: warn metodunun üzerine yazdım. Bunun yerine önceki kod, kullanım:

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 

BTW uygulamanızın adını (İçinde bulunduğu klasörün ismi) ile myrailsappname değiştirmeniz gerekiyor. Bu ismi almak için muhtemelen daha genel bir yol var, ama şu an bulamadım.

0

Sanırım bir çözüm buldum: test/test_helper.rb modülünü yeniden açtım ve makro tanımını aynı tanım ile yazdım ancak kullanımdan kaldırılma uyarısı yorumlandı. Ben hala eklentileri ya da ben yüklü olan taşlar oldu kodundan diğer kullanımdan kaldırma çok sayıda uyarı vardı Aslında bu olsa yapmak için yollar ...

# 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 
6

Eski soru - ancak yeni seçerek dikkate almak istemediğiniz amortismanlar varsa:

ActiveSupport::Deprecation.behavior = lambda do |msg, stack| 
    unless /LIBRARY_NAME/ =~ msg 
    ActiveSupport::Deprecation::DEFAULT_BEHAVIORS[:stderr].call(msg,stack) # whichever handlers you want - this is the default 
    end 
end 

Bu ActiveSupport 3 içindir.

+2

ActiveSupport 4'te hala çalışır. –

2

Alternatif önerebilir miyim?

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