2017-01-11 3 views
0

私は支払いゲートウェイ統合クラスを遡及的にテストすることに取り組んでいます。 Rspecのメソッドチェーンから得られた代入を模倣する方法は?

payment_method = order.purchaser.payment_methods.build(
       transaction.payment_method.field_hash 
       .select { |k, _| valid_payment_method_params.include?(k) } 
       .merge(type: transaction.payment_details.payment_type.camelize) 
       ) 

は後で purchaseで、 payment_methodは、いくつかの戻り値を取得するには、いくつかの条件文で使用されている: payment_method次のコードを経由して割り当てられている範囲内の方法 purchaseは、あります。

payment_methodにある値があることを確認する必要があります。私の最初の本能は何とか戻り値を模倣することです。例えば。 -

allow(:payment_method).to be(my_value) 

これは擬似コードですが、Relishのドキュメントではそれを見つけることができませんでした。私がこのような状況に遭遇したのは今回が初めてではないので、私は何か根本的または明らかなものが欠けていると信じています。

この割り当てを模擬して、payment_methodが私の望むものであることを確認するにはどうすればよいですか?

答えて

0

これを別のフォーラムで議論したところ、私は、モックはメソッド呼び出しのみを対象とし、ローカル変数は対象にできないことを学びました。したがって、私が着手した解決策は、その割り当ての右側を独自の方法に抽出し、その方法を模擬することでした。たとえば、次のように続いて

def new_method_with_extracted_logic(order) 
    order.purchaser.payment_methods.build(
      transaction.payment_method.field_hash 
      .select { |k, _| valid_payment_method_params.include?(k) } 
      .merge(type: transaction.payment_details.payment_type.camelize) 
      ) 
end 

allow(self).to receive(:new_method_with_extracted_logic).with(:order)and_return(object_i_want) 
関連する問題