2013-05-05 21 views
6

aws-sdk gemini kullanarak Amazon S3'e bir dosya yükleyen bazı kodum var. Görünüşe göre dosyayı yüklemek için bir HTTP koydu.aws-sdk gem alay nasıl?

aws-sdk gem'in bu işlevselliği ile uğraşmanın iyi bir yolu var mı?

Webmock kullanmayı denedim, ancak aws-sdk gem önce bir get latest/meta-data/iam/security-credentials/ yapıyor gibi görünüyor. Webmock kullanımı bu işlevi alay etmek için en iyi yol olmayabilir.

RSpec'de çalışma.

cevap

11

AWS SDK for Ruby adresindeki isteklerle dalga geçmenin birçok yolu vardır. Trevor Rowe geçtiğimiz günlerde, SDK'nın Webmock gibi harici bağımlılıkları gerektirmeyen object stubbing için yerel desteğini kullanma hakkında bir makale yayınladı. Önbelleğe alınabilir entegrasyon testleri oluşturmak için VCR (bağlantıyı başka bir blog gönderisine gönderecek) gibi araçları da kullanabilirsiniz; Bu şekilde, doğruluk istediğinizde ve hız istediğinizde ağa çarpmamak istediğinizde canlı servise karşı test edebilirsiniz.

latest/meta-data/iam/security-credentials/ numaralı istekte bulunan istekle ilgili olarak, SDK'nın kimlik bilgilerini aramaya çalıştığı ve hiçbiri sağlanmadığı takdirde, son çare olarak bir EC2 örneğinde çalışıp çalışmadığınızı kontrol ederek SDK'ya neden oluyor fazladan bir HTTP isteği yapmak. VCR gibi bir şey kullanıyorsanız, ilk çalıştırma için geçerli kimlik bilgilerini sağlamak isteyeceksiniz, ancak bu denetimi yalnızca sahte statik kimlik sağlayarak önleyebilirsiniz. Statik kimlik bilgileri in another blog post that Trevor wrote on credential management'u (bu ayrıca geliştirici kılavuzunda ve SDK belgelerinde bulunmalıdır) nasıl sağladığınız hakkında bilgi edinebilirsiniz.

+0

Bu çok yararlıdır: Daha fazla ayrıntı için

s3.stub_data(:list_buckets, buckets:[{name:'aws-sdk'}]) #=> #<struct Aws::S3::Types::ListBucketsOutput buckets=[#<struct Aws::S3::Types::Bucket name="aws-sdk", creation_date=nil>], owner=#<struct Aws::S3::Types::Owner display_name="DisplayName", id="ID">> 

bakın. VCR iyi bir seçim gibi görünüyor çünkü her iki dünyanın en iyisini sunuyor: hızlı testler *** ve *** entegrasyonu. –

+0

Bu, geçerli kimlik bilgilerimin bir kopyasının, bir CVS'de işlenebilecek VCR dosyalarında bir yerde depolanacağı anlamına gelmez mi? –

+1

@FabrizioRegini VCR kasetlerinden hassas verileri filtreleyebilirsiniz: https://relishapp.com/vcr/vcr/v/2-9-2/docs/configuration/filter-sensitive-data – David

14

Eğer aws-sdk mücevher sürüm 2 kullanıyorsanız eklemeyi deneyin:

Aws.config.update(stub_responses: true) 

(genellikle rails_helper.rb dosyasındakiler) sizin RSpec.configure blokta


için Yukarıdaki çalışmalar yapılırken, yanıt içeriğini daha fazla belirtmezseniz - mutlaka geçerli değil, ancak bitiştirilmişse - boş yanıtlar geri dönecektir.

oluşturamazsınız.START_PARAGRAPHKullanmak ve adlandırılmış operasyondan stubbed yanıt verilerini döndürebilir:

s3 = Aws::S3::Client.new 
s3.stub_data(:list_buckets) 
#=> #<struct Aws::S3::Types::ListBucketsOutput buckets=[], owner=#<struct Aws::S3::Types::Owner display_name="DisplayName", id="ID">> 

Ayrıca, tepki saplama uygulanacak veriler sağlayabilir varsayılan koçanları üreten. http://docs.aws.amazon.com/sdkforruby/api/Aws/ClientStubs.html