2

AWS の使用状況に関するデータを検索および取得できる単純なアプリケーションを作成しています。Ruby aws-sdkgem を使用して 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、およびリージョンなどのテストが渡されるようにするためです。つまり、モック構成オブジェクトが正しいキーで呼び出されたことをアサートできるようにしたいと思います等

これを行う方法がわかりません...モックオブジェクトを渡すことができないようです...そして、テスト対象のクラスでメソッドをモックする方法もわかりません。この段階で私の理解は崩壊します...助けてください!

4

1 に答える 1