/ /spec_helper.rbのモジュールメソッドを再定義できません-ruby、rspec、savon

spec_helper.rbでモジュールメソッドを再定義できません - ruby​​、rspec、savon

「いくつかの宝石」私はSavonの宝石を使用しています。 Savonロギングを無効にする必要がありますが、「Some gem」をいじりたくないので、Savon.client(globals、&block)メソッドを再定義することにしました。 spec_helper.rb paramを無効にするグローバルハッシュログにマージします。しかし、どういうわけか私のコードはモジュールメソッドを再定義しません。

    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は定義されており、: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"

更新: before_allトリガーでSavon.clientを再定義しようとしましたが、どういうわけかこれが機能しませんでした。新しい質問を作成しました。 https://stackoverflow.com/questions/25132591/strange-jump-in-pry-when-debugging-spec-helper-rb

回答:

回答№1は0

最後に、新しいヘルパーを作成しました 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