2010-08-03 83 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消息(在這種情況下可能沒有意義,但應該給你這個想法)。