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 接続を取得するプロセス (上記の 2 つのステップ) もテストしたいと思います。次のようなテストを記述できるようになりたいと思います。
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、およびリージョンなどのテストが渡されるようにするためです。つまり、モック構成オブジェクトが正しいキーで呼び出されたことをアサートできるようにしたいと思います等
これを行う方法がわかりません...モックオブジェクトを渡すことができないようです...そして、テスト対象のクラスでメソッドをモックする方法もわかりません。この段階で私の理解は崩壊します...助けてください!