Ruby on rails 如何模拟Rspec中方法链产生的赋值?

Ruby on rails 如何模拟Rspec中方法链产生的赋值?,ruby-on-rails,unit-testing,rspec,Ruby On Rails,Unit Testing,Rspec,我正在追溯测试一个支付网关集成类。有一种方法购买,其中付款方法通过以下代码分配: payment_method = order.purchaser.payment_methods.build( transaction.payment_method.field_hash .select { |k, _| valid_payment_method_params.include?(k) } .merg

我正在追溯测试一个支付网关集成类。有一种方法
购买
,其中
付款方法
通过以下代码分配:

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\u方法来获取一些返回值

我需要确保付款方式有一定的价值。我的第一反应是以某种方式模拟返回值。例如:

allow(:payment_method).to be(my_value)
不过,这是伪代码,我在津津有味的文档中找不到它的等价物。这已经不是我第一次遇到这种情况了,所以我相信我错过了一些基本的或明显的东西,我希望有一些见解


我如何模拟这个任务,并确保
支付方法
是我想要的?

因此,在另一个论坛上讨论了这个问题后,我了解到模拟只能针对方法调用,而不能针对局部变量。因此,我找到的解决方案是将该赋值的右侧提取到它自己的方法中,然后模拟该方法。例如:

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)