/ / Spec_helper.rb में एक मॉड्यूल विधि को फिर से परिभाषित नहीं कर सकता - रूबी, आरएसपीईसी, सैवॉन

Spec_helper.rb में एक मॉड्यूल विधि को फिर से परिभाषित नहीं कर सकता - रूबी, आरएसपीईसी, स्यूवन

"कुछ मणि" मैं सैवन रत्न के उपयोग पर निर्भर करता हूं। मुझे साइवन लॉगिंग को अक्षम करने की आवश्यकता है, लेकिन "कुछ मणि" के साथ खिलवाड़ नहीं करना है, और इसमें सैवॉन.क्लिएंट (ग्लोबल्स, और ब्लॉक) विधि को फिर से परिभाषित करने का फैसला किया है। spec_helper.rb ग्लोबल्स हैश लॉग इन करने में विलीन हो जाना। लेकिन, किसी तरह मेरा कोड मॉड्यूल विधि को फिर से परिभाषित नहीं करता है।

    20:     module Savon
21:       unless Savon.respond_to? :origin_client
=> 22:         binding.pry
23:         #alias_method :origin_client, :client
24:         def self.client globals = {}, &block
25:           binding.pry # <-- doesn"t stop here
26:           globals.merge!(log: false, log_level: :error)
27:           self.origin_client(globals, &block)

[1] pry(Savon)> Savon.respond_to? :client

जैसा कि ऊपर दिखाया गया है, सैवोन परिभाषित है और इसमें भी है: क्लाइंट विधि

यहाँ Savon मॉड्यूल परिभाषा है।

module Savon

Error                = Class.new(RuntimeError)
InitializationError  = Class.new(Error)
InvalidResponseError = Class.new(Error)

def self.client(globals = {}, &block)
Client.new(globals, &block)
end

def self.observers
@observers ||= []
end

def self.notify_observers(operation_name, builder, globals, locals)
observers.inject(nil) do |response, observer|
observer.notify(operation_name, builder, globals, locals)
end
end

end

require "savon/version"
require "savon/client"
require "savon/model"

अद्यतन करें: मैंने पहले ट्रिगर में Savon.client को फिर से परिभाषित करने की कोशिश की, और किसी तरह यह काम नहीं किया, मैंने एक नया सवाल बनाया https://stackoverflow.com/questions/25132591/strange-jump-in-pry-when-debugging-spec-helper-rb

उत्तर:

जवाब के लिए 0 № 1

अंत में मैंने एक नया सहायक बनाया spec/support/savon_helper.rb इसके लिए, और सफल।

"सैवन" की आवश्यकता

# Enable Savon logging for errors only
module Savon
unless Savon.respond_to? :origin_client
class << self
alias_method :origin_client, :client
end

def self.client globals = {}, &block
#globals.merge!(log_level: :error)
globals.merge!(log: false) # disable logging completely
self.origin_client(globals, &block)
end
end
end