4

所以我希望覆盖测试文件中的反引号,并将其应用于测试期间调用的所有脚本。测试文件使用了几个类(保存在其他文件中),当这些类使用反引号时,我在测试文件中的覆盖不适用。

例如以下是在测试文件中(tc_some_test.rb

module BacktickURI
  def `(uri)
    # `untrick beautifier
    puts "uri = #{uri}\n"
    if uri =~ /some command/
      puts "command ran #{uri}\n"
    else
      system("#{uri} 2>&1")
    end
  end
end

include BacktickURI

对于 中使用的所有反引号tc_some_test.rb,这有效,但调用的外部类和脚本仍使用正常的、非覆盖的反引号。

任何帮助表示赞赏。另一种方法可能是从不同的脚本/文件覆盖一个脚本/文件中的方法。

4

2 回答 2

2

输入 irb:

define_singleton_method '`' do |*| puts 'kokot' end

`ls`
#=> kokot
于 2013-01-18T18:27:46.680 回答
1

尝试这个:

module BacktickURI
  def included(klass)
    klass.class_eval do
      define_method("`") do |uri|
        puts "uri = #{uri}\n"
        if uri =~ /some command/
          puts "command ran #{uri}\n"
        else
          system("#{uri} 2>&1")
        end
      end
    end
  end
end
于 2013-01-18T02:01:48.740 回答