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 に答える