2011-10-24 16 views
6

Şu anda uygulamamın bir parçası olarak üçüncü taraf bir web hizmetini arıyorum. Bunu yapmak için RestClient gem kullanıyorum. Aynı şeyi yapmak için bir takım aletler mevcut, bu yüzden önemli olmamalı.Ruby on Rails: Bir üçüncü tarafa yapılan bir başarısız çağrıyı sınamanın en iyi yolu API

Neyi merak ettiğim, yeterince iyi bir sınamaya sahip olmaktır, çok süslü bir şey yoktur, nerede üçüncü parti web hizmeti herhangi bir nedenden dolayı kullanılamıyorsa, uygulamamın nasıl yanıt verdiğini taklit edebileceğim hiçbir şey yoktur. Ağ gecikme/komplikasyonları nedeniyle bir hız sınırını veya zaman aşımını aştığım için, sadece bir HTTP durum kodu gibi bir şey alabilmeyi ve bu etkinlikte uygulamamın ne yaptığını test edebilmeyi istiyorum.

Bunu Test :: Unit ile yapmanın en iyi yolu nedir? Şu anda üçüncü taraf hizmetine yapılan çağrı, denetleyicilerimden birinde saklanıyor. Uzaktan servisin farklı uç noktaları için bazı sarıcı yöntemleri ile basit bir modül var. Hizmetim mevcut olduğunda veya mevcut olmadığında uygulamamın doğru şeyleri yaptığından emin olmak istiyorum.

Test :: Birim'in yanında, bunu yapmak için doğru yolu 'kapatabilecek' ek bir çerçeve kullanıyor mu? Açıkçası, bir ağ zaman aşımını zorlayamam ve sadece testler için zaman değmez IPtables gibi şeylerle uğraşmaya başlayamıyorum. Bu sorunun Facebook ve Twitter gibi şeyleri web uygulamalarına entegre etmesinin milyonlarca kez çözüldüğüne eminim. Bu API'lara sağlam/kontrollü bir biçimde ulaşırken başarısızlık için nasıl test ediyorsunuz?

cevap

5

tavsiye ediyorum webmock gibi bir şey kullanarak, http isteklerinizi numaralı telefon numaranızla paylaşmak için (yalnızca başarısız bir istekle karşılaşmamak için); Testleri her çalıştırdığınızda üçüncü taraf hizmetine çarpmak zorunda kalmak yerine test paketinizi büyük ölçüde hızlandıracak. Webmock Rest Client ve Test :: Unit uygulamasını destekler.

stub_request(:any, 'www.example.net').to_timeout 
RestClient.post('www.example.net', 'abc') # ===> RestClient::RequestTimeout 
: Bir ağ zaman aşımı test etmek, bir örnek olarak

require 'webmock/test_unit' 

: Sadece test/test_helper.rb dosyasında bu kodu koymak

1
railscast: 291 (abone only) VCR ve RSpec (i, biliyorum Testi değil değil: Birimi) ile test bahsediyor

zaten

Eğer bu tür bir şey için VCR kullanarak içine görünebilir