【发布时间】:2013-07-01 11:31:54
【问题描述】:
我创建了一个名为 Transaction 的服务对象,它处理订单,设置付款,然后设置模型关联。
这个类被称为事务,有两个方法,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 模型使用了设计。设计测试助手不能在控制器之外使用,而且由于我在服务中进行测试,所以它不起作用。
【问题讨论】:
-
FactoryGirl 和 Devise 应该不是问题。服务测试应该类似于模型测试。您应该可以将 FactoryGirl 用于您的模型,不是吗?
标签: ruby-on-rails ruby testing rspec