2017-07-03 5 views
1

を使用してTwilio APIとの統合をテストする方法Twilio-RubyをRubyに統合し、その宝石を使用してAPIに投稿するいくつかのメソッドを作成しました。Minitest

はここでRailsの中に私TwilioMessageモデル内のメソッドの例です:

def message(recepient_number, message_body = INSTRUCTIONS, phone_number = '++18889990000') 
    account_sid = ENV['TWILIO_ACCOUNT_SID'] 
    auth_token = ENV['TWILIO_AUTH_TOKEN'] 

    @client = Twilio::REST::Client.new account_sid, auth_token 
    @client.account.messages.create({ 
             :from => phone_number, 
             :to => recepient_number, 
             :body => message_body 
            }) 
    end 

私はMinitestスイートでWebMockMochaを統合しようとしたが、私はちょうどそれを開始する場所がわからないんだけど。

私は、発信要求をブロックするWebMockを使用し、それを試してみましたスタブ:

stub_request(
     :post, "https://api.twilio.com/2010-04-01/Accounts/[ACCOUNT_ID]/Messages.json" 
    ).to_return(status: 200) 

私のセットアップブロックで。

はその後、私のテストでは、私が持っている:

私test_helperファイルで
test "send message" do 
    TwilioMessage.expects(:message).with('+18889990000').returns(Net::HTTPSuccess) 
    end 

私はそれがローカル接続のみを許可するように設定されています。

WebMock.disable_net_connect!(allow_localhost: true) 

しかし、私が受け取っ:

Minitest::Assertion: not all expectations were satisfied 
unsatisfied expectations: 
- expected exactly once, not yet invoked: TwilioMessage(id: integer, from_number: string, to_number: string, message_body: text, message_type: string, twilio_contact_id: integer, created_at: datetime, updated_at: datetime).send_message('+18889990000') 

を私はTwilio-Rubyの宝石のための仕様を見てみましたが、運がなかったです。

どのようにテストしたか、またはテストする方法の例と説明がありますか?私はそれの周りに私の頭をラップしようとしています。

+0

出力から、send_messageが呼び出されなかったようです。 1つのアプローチは、WebMockをインターネットに接続できるように設定し、Twilio APIを呼び出している間にテストが合格になるように書くことです。それが通過した後は、ネット接続を無効にしてリクエストをスタブして、まだ通過テストをしていますが、Twilioを呼び出さないようにしてください。 –

答えて

0

私はRuby Gem VCRを使ってテストを終えました。それは設定が簡単であることが分かります。テストファイルの先頭に

、私が追加:

require 'vcr' 

VCR.configure do |config| 
    config.cassette_library_dir = "test/vcr/cassettes" 
    config.hook_into :webmock 
end 

をVCRは、コールが初めて通過することができますし、上記のconfig.cassette_library_dirラインで指定されたフィクスチャファイルに応答を記録します。

次に、実際のテストでは、VCR.use_cassetteを使用して成功したコールを記録しました。私は有効な電話番号を使用して、それが動作していることを確認するために送信しました。以下のテストでは、電話番号のサンプルが表示されます。この例を使用する場合は、必ず変更してください。

test 'send message' do 
    VCR.use_cassette("send_sms") do 
     message = TwilioMessage.new.message('+18880007777') 
     assert_nil message.error_code 
    end 
    end 

ここでは、RailsCast episode on VCRが非常に役立つことがわかりました。