【问题标题】:How to stub an external API in RSpec without using vcr?如何在不使用 vcr 的情况下在 RSpec 中存根外部 API?
【发布时间】:2015-02-17 09:16:52
【问题描述】:

我创建了一个模块,它利用 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'

我已经“p”检查了该 twilio 文件并尝试模拟它所期望的对象,但这对我不起作用。

谁能解释如何使用 WebMock 来有效地阻止这个 post 方法,或者有没有更简单的方法来存根这个测试,不需要使用任何其他 gem?

【问题讨论】:

    标签: ruby rspec twilio stub


    【解决方案1】:

    您是否考虑过将“send_text_message”存根,例如:

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

    或类似的东西?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2012-08-31
      相关资源
      最近更新 更多