2016-10-13 18 views
5

Rubyでいくつかのテストを行うために#sendを使用しようとしているプラ​​イベートメソッドがあります。メソッドは複雑で、クラス外に公開したくないのでメソッドをテストしたいが、パブリックメソッドとしてリストする必要はありません。それはキーワードの引数を持っています。 sendを使ってメソッドを呼び出すだけでなく、キーワード引数/名前付きパラメータを渡すにはどうすればよいですか?方法はありますか?Rubyでキーワード引数を使用して(:send)を使用していますか?

方法は次のようになります。

def some_method(keyword_arg1:, keyword_arg2:, keyword_arg3: nil)

答えて

11

はキーワード引数が定義されている方法によって異なります。

彼らは何らかの理由でインラインで定義されている場合は

、インラインで渡す:

SomeClass.send(:some_method, {keyword_arg1: 'foo', keyword_arg2: 'bar'}) 

を彼らはハッシュで定義されている場合は、代わりにそれを解凍することができます

hash = {keyword_arg1: 'baz', keyword_arg2: 'bing'} 
SomeClass.send(:some_method, **hash) 
関連する問題