首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟aws-sdk gem?

如何模拟aws-sdk gem?
EN

Stack Overflow用户
提问于 2013-05-05 09:05:10
回答 2查看 9K关注 0票数 9

我有一些使用aws-sdk gem将文件上传到亚马逊S3的代码。显然,它使用HTTP put来上传文件。

有没有一个很好的方法来模拟aws-sdk gem的这个功能?

我尝试使用Webmock,但aws-sdk gem似乎先做了一个get latest/meta-data/iam/security-credentials/。似乎使用Webmock可能不是模拟此功能的最佳方式。

在RSpec中工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-05 15:10:00

有很多方法可以在AWS SDK for Ruby中模拟请求。Trevor Rowe最近发表了一篇关于使用SDK对object stubbing的本机支持的文章,它不需要任何像Webmock这样的外部依赖项。你也可以使用像VCR这样的工具(链接会把你带到另一篇博客)来构建可缓存的集成测试;通过这种方式,你可以在你想要准确的时候对实时服务进行测试,并且在你想要速度的时候避免访问网络。

对于latest/meta-data/iam/security-credentials/上的get请求,这是因为SDK正在尝试查找凭据,如果没有提供凭据,它将检查您是否在EC2实例上运行作为最后手段,从而导致SDK发出额外的HTTP请求。您可以通过简单地提供虚假的静态凭据来避免此检查,但是如果您使用的是VCR之类的东西,则需要为第一次运行提供有效的凭据。您可以阅读有关如何提供静态凭据in another blog post that Trevor wrote on credential management的信息(这也应该在开发人员指南和SDK文档中提供)。

票数 12
EN

Stack Overflow用户

发布于 2015-11-10 22:52:53

如果您使用的是版本2的aws-sdk gem,请尝试添加:

代码语言:javascript
复制
Aws.config.update(stub_responses: true)

到您的rails_helper.rb文件中的RSpec.configure块)

虽然上面的方法有效,但如果您不进一步指定响应内容,它将返回空响应-不一定有效,但已存根。

您可以从命名操作生成和返回存根响应数据:

代码语言:javascript
复制
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">>

除了生成默认存根之外,您还可以提供数据以应用于响应存根。

代码语言:javascript
复制
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">>

有关详细信息,请参阅:http://docs.aws.amazon.com/sdkforruby/api/Aws/ClientStubs.html

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16380426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档