テストおよびTwilioアプリケーションのテストに関する私の経験では、追加するリスクを排除するためにテストします。独自のSMSコードをRESTエンドポイントに対してロールするのではなく、 Twilio gemを使用することをお勧めします。これにより、リスクの量が最小限に抑えられます。
APIをビジネスロジッククラスで可能な限り薄くラップし、主にビジネスロジックをテストします。たとえば、私のシステムでは、SMSはリマインダークラスから送信されます。コードは次のようになります。
class SomeWrapperClass
if (RAILS_ENV == "testing")
@@sent_smses = []
cattr_accessor :sent_smses
end
def send_a_message(to, from, message, callback_url = nil)
unless RAILS_ENV == "testing"
Twilio::SMS.message(to, from, message, callback_url)
else
@@sent_smses << {:to => to, :from => from, :message => message, :callback_url => callback_url}
end
end
end
これにより、ビジネスロジックに焦点を当てたテストを作成できます。これは、私が台無しにするものです。たとえば、SMSメッセージを送信するメソッドsend_reminder(client)をテストする場合:
test "sends reminder to client" do
SomeWrapperClass.sent_smses = []
client = clients(:send_reminder_test_case)
Reminder.send_reminder(client)
sent_message = SomeWrapperClass.sent_smses.last
assert !sent_message.blank?, "Sending a reminder should fire an SMS to client."
assert sent_message.index(client.name) >= 0, "Sending a reminder should fire an SMS with the client's name in it.
...
end
今、私が追加した実際のリスクをテストしています。それは、Reminder.send_reminderを台無しにしているということです。一方、ラッパーはリスクフリーに近い必要があります。