我正在寫一個簡單的應用程序,它允許我搜索和檢索有關我的AWS使用情況的數據。我使用Ruby aws-sdk
gem來連接到AWS。如何模擬連接到外部服務
的方法去哪裏可以查詢階段AWS爲2階段:
1)建立連接:
AWS.config({access_key_id: 'REDACTED', secret_access_key_id: 'REDACTED', region: 'eu-west-1'})
這將返回一個AWS::Core::Configuration
對象。
2)獲取的對象我想查詢的AWS資源:
ec2 = AWS::EC2.new(:ec2_endpoint => 'ec2.eu-west-1.amazonaws.com')
現在,我可以得到的數據...
我希望能夠編寫單元測試,其對數據進行操作就像來自AWS的那樣。顯然,我不想每次都調用AWS ...所以我想創建一個測試雙重代替AWS。我知道如何做到這一點:
describe AwsThing do
it 'gets images' do
amis = OpenStruct.new
ec2 = double('ec2-api')
ec2.should_receive(:images}.and_return amis
expect(subject.find_image(ec2, 'handy-tag')).to eql 'an-ami-that-I-tagged'
end
end
所以AwsThing#find_image
方法使用EC2模擬,我可以測試方法的邏輯。都好。
但是,我也想測試一下我得到ec2連接的過程 - 上面的兩個步驟。我想,我希望能夠寫一個測試是這樣的:
it 'gets an AWS API connection' do
expect(subject.connect(access_key, secret_key, region).to be_a AWS::Core::Configuration
end
,如果我調用真正的API工作正常。但我想嘲笑這一點......只是爲了測試連接方法,access_key和區域等等。即我希望能夠斷言模擬配置對象是用右鍵調用的等
我看不出如何做到這一點...因爲它似乎我不能傳遞模擬對象...我不明白我怎麼可以模擬該類上的方法測試。在這個階段,我的理解失敗了......幫助!
這可能有助於通過RSpec雙打模擬外部AWS調用:http://stackoverflow.com/questions/33557451/how-do-i-mock-aws-sdk-v2-with-rspec/33557452#33557452 – Pete