2010-08-03 40 views
2

我是新来的测试策略和嘲笑,而且我很难搞清楚如何模拟对外部服务的调用。我敢肯定,这是件容易的事,我只是不知道究竟是什么。嘲笑外部的API

我使用Braintree gem通过Braintree网关向订阅服务收费,我想模拟UserController的create方法中的Customer create方法和Subscription创建方法。

一个Customer.create方法看起来是这样的:

result = Braintree::Customer.create(
    :first_name => @creditcard.first_name, 
    :last_name => @creditcard.last_name, 
    :email => @user.email 
    :credit_card => { 
     ... 
     } 
    } 
) 

这会返回一个布伦特里::成功的结果对象,与处理结果的属性。

我想我必须做一些事情,如:

Braintree::Customer.expects(:create).returns(...) 

但在发生什么回报面积?我需要创建自己的模拟了成功的对象与假处理结果的属性,还是有更简单的方法来做到这一切?

感谢您提供的任何帮助。

+1

你需要返回一些对象,要么是或“呱呱”布兰特里::客户 我有时只是使用OpenStruct – rogerdpack 2010-08-04 11:03:00

+0

啊,我认为这正是我期待的那种事情。只是模仿相同的基本结构。谢谢! – joeellis 2010-08-04 16:06:46

回答

2

可以返回一个OpenStruct所建议的评论或stubmock,这是恕我直言更好的测试更有用,因为你可以很容易地设置期望,像这样:

Braintree::Customer.expects(:create).returns(mock(:save => true)) 

返回的模拟将期待save消息(在这种情况下可能没有意义,但应该给你这个想法)。