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)