我创建了一个名为Transaction的服务对象,它处理订单、设置支付并建立模型关联。
这个类叫做Transaction,有两个方法initialize和pay。我在spec/services/中测试它(它位于app/services/中)。
initialize方法接收一个账户和一些用户传入的参数以处理订单。
我正试图用rspec测试pay方法,但这个函数包含了很多内容。例如,它会创建新的模型,然后建立它们之间的一些关联。
到目前为止,我已经创建了一个double账户,如下所示:
@account = double("account", :confirmed => true, :confirmed? => true)
然而,在Transaction pay方法中使用了许多其他函数和关联。因此,当我在测试中调用Transaction.pay时,一旦调用这些关联,就会返回一个错误:
这个类叫做Transaction,有两个方法initialize和pay。我在spec/services/中测试它(它位于app/services/中)。
initialize方法接收一个账户和一些用户传入的参数以处理订单。
我正试图用rspec测试pay方法,但这个函数包含了很多内容。例如,它会创建新的模型,然后建立它们之间的一些关联。
到目前为止,我已经创建了一个double账户,如下所示:
@account = double("account", :confirmed => true, :confirmed? => true)
然而,在Transaction pay方法中使用了许多其他函数和关联。因此,当我在测试中调用Transaction.pay时,一旦调用这些关联,就会返回一个错误:
ActiveRecord::AssociationTypeMismatch:
Business(#70250016824700) expected, got RSpec::Mocks:.
商业模式与账户一样是双重的,作为属性添加到@account中。当Transaction.pay在其中创建新的模型和关联时,我该如何测试它?
我需要像上面展示的一样mock它们吗?还是有更好的方法可以做到呢?
我正在使用FactoryGirl,但由于我的account模型使用了Devise,我无法使用它。因为Devise测试助手不能在控制器之外使用,而且由于我正在服务中进行测试,所以它无法工作。