2014-04-10 18 views
2

我正在寫一個簡單的應用程序,它允許我搜索和檢索有關我的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和區域等等。即我希望能夠斷言模擬配置對象是用右鍵調用的等

我看不出如何做到這一點...因爲它似乎我不能傳遞模擬對象...我不明白我怎麼可以模擬該類上的方法測試。在這個階段,我的理解失敗了......幫助!

+0

這可能有助於通過RSpec雙打模擬外部AWS調用:http://stackoverflow.com/questions/33557451/how-do-i-mock-aws-sdk-v2-with-rspec/33557452#33557452 – Pete

回答

1

我不知道你爲什麼想測試一下。該功能由您正在使用的aws-sdk gem提供。他們有廣泛的測試覆蓋範圍,並確保你正在嘗試測試,實際上工作。如果你對它們的工作方式感興趣,請查看github.com上的源代碼https://github.com/aws/aws-sdk-ruby/tree/master/spec

你應該只測試你自己編寫的代碼和一個集成測試,一切正常。集成測試幾乎是你已經擁有的。或者我在這裏錯過了什麼?

相關問題