2

Twilio API を使用してテキスト メッセージを送信する Rails アプリを作成しています。

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? を見てきましたが、まったく同じではないと思います...?)

4

2 に答える 2

1

別のアイデアは、WebMockを使用することです。クライアントが Twilio にリクエストを行っているとき。リクエストをスタブするだけです。スタブ内では、リクエストから返されるものと、それを呼び出すことができるパラメーターを定義することもできます。

そして設定すると

   WebMock.disable_net_connect!

テストから実際の要求を作成できないことは確かです。

この方法では、テストの動作を変更せず、テストが成功するために外部 API に依存しません。

于 2013-07-25T07:43:39.587 に答える
1

Twilio エバンジェリストはこちら。

私たちは、まさにこのシナリオのためにTest Credentialsを作成しました。Test Credentials は、Twilio REST API に対して要求を行うときに使用できる特別な資格情報 (AccountSid および AuthToken) のセットであり、基本的には電話をかけたり、テキスト メッセージを送信したりするだけで、実際にはそうではありません。それを行います(または料金を請求します)。

特別な電話番号のセットを使用して、Twilio に特定の成功またはエラー条件を返すようにすることもできます。

テスト資格情報は、 Twilio ダッシュボードで確認できます。

それが役立つことを願っています。

于 2013-07-24T23:13:53.983 に答える