我创建了一个名为Transaction的服务对象,它处理订单,设置付款并设置模型关联。使用Rspec测试和嘲笑服务
该类被称为交易有两种方法,initialize
和pay
。我正在测试它在spec/services/
(它在app/services
)。
initialize
方法需要account
和用户传入的一些参数来处理订单。
我想用rspec测试pay
。我怎样才能真正做这样的测试?这个功能有很多。例如,它会创建新模型,然后在它们之间建立一些关联。
到目前为止,我创建了一个双account
如下:
@account = double("account", :confirmed => true, :confirmed? => true)
不过,也有在交易付费方式使用的许多功能(和关联)。因此,例如,当这些关联(调用一次我打电话Transaction.pay
测试),它返回一个错误:
ActiveRecord::AssociationTypeMismatch:
Business(#70250016824700) expected, got RSpec::Mocks:.
的business
模型是一个双重就像account
,并添加为@account
属性。如何在创建新模型和关联时测试Transaction.pay?
我是否需要如上所示模拟它们全部?还是有更好的方法来做到这一点?
我正在使用FactoryGirl,但我无法使用它,因为我的account
模型使用Devise。设计测试助手不能在控制器之外使用,并且由于我正在测试服务,所以它不起作用。
FactoryGirl和Devise应该不成问题。服务测试应该与模型测试类似。你应该可以为你的模型使用FactoryGirl,不是吗? – phoet