我正在寫一個Rails應用程序使用Twilio API來發送文本信息的Web服務:如何假紅寶石和MINITEST
http://www.twilio.com/docs/api/rest/sending-sms
,爲此,我做的:
client = Twilio::REST::Client.new account_sid, auth_token
client.account.sms.messages.create({
# stuff ...
})
這一切都很好,不過,我不希望我的測試發送一堆文本消息,因爲這將是愚蠢的。所以,我想覆蓋Twilio :: REST :: Client.new給我一個對象,讓我在我的測試中調用acccount.sms.messages.create
,而不會過分地大驚小怪。
我有一個可行的解決方案,但感覺醜陋:
def mock_twilio_service(stub_client)
Twilio::REST::Client.stub :new, stub_client do
yield
end
end
class Recordy
attr_accessor :calls
def initialize
@calls = []
end
def method_missing(method, *args)
ret = self.class.new
@calls << {
method: method,
args: args,
block_given: block_given?,
ret: ret
}
yield if block_given?
ret
end
end
,然後在我的測試:
test "send a text" do
cli = Recordy.new
mock_twilio_service cli do
# ... stuff
end
end
我覺得我失去了一些東西超級明顯,但我不確定。我是嗎?還是我完全吠叫錯了樹? (是的,我看過How do I mock a Class with Ruby?,但我不認爲它是完全一樣的......)
是的 - 它看起來像twilio紅寶石使用直Net :: HTTP,所以這應該工作正常。謝謝! – Nate
謝謝!它看起來像twilio-ruby使用Net :: HTTP,所以WebMock應該爲我工作。 – Nate