无法在spec_helper.rb中重新定义模块方法

时间:2014-08-05 06:21:04

标签: ruby rspec savon

"一些宝石"我依赖于使用Savon宝石。 我需要禁用Savon日志记录,但不想搞砸#34;某些gem",并决定重新定义spec_helper.rb中的Savon.client(全局和&块)方法来合并到globals哈希日志禁用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已定义,并且还具有:客户端方法

这是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 :(得分:0)

最后我为此创建了一个新助手spec/support/savon_helper.rb,并且成功了。

要求'savon'

# 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