如何在不使用vcr的情况下在RSpec中存根外部API?

时间:2015-02-17 09:16:53

标签: ruby rspec twilio stub

我创建了一个利用twilio-ruby gem为另一个对象提供短信功能的模块。代码有效,但我发现很难测试。

module Sms

TWILIO_PHONE_NUMBER = "+44..."

ACCOUNT_SID = 'AC0...'
AUTH_TOKEN = 'ae7...'

def send_text_message(customers_phone_number, delivery_time)
  @client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
  @client.messages.create(
    from: TWILIO_PHONE_NUMBER,
    to: customers_phone_number.to_s,
    body: "Thank you! Your order was placed and will be delivered before #{delivery_time.to_s[11..15]}"
)
end

end

我能够使用vcr来固定API调用,但这对于我需要做的事情来说似乎有些过分。在线最常见的建议是使用WebMock,但在实现时我无法通过以下错误:

NoMethodError:
   undefined method `[]' for nil:NilClass
 # /Users/tomcoakes/.rvm/gems/ruby-2.2.0/gems/twilio-ruby-3.14.5/lib/twilio-ruby/rest/list_resource.rb:101:in `create'

我已'检查过那个twilio文件,并试图模仿它所期待的对象,但这对我没用。

是否有人能够解释如何使用WebMock有效地阻止此post方法,或者是否有一种更简单的方法来存根这个不需要使用任何其他宝石的测试?

1 个答案:

答案 0 :(得分:1)

您是否考虑使用以下内容对'send_text_message'进行存根:

ruby expect(object).to receive(:send_text_message)

或类似的东西?