Module: Aws::ClientStubs

Included in:
Client
Defined in:
aws-sdk-core/lib/aws-sdk-core/client_stubs.rb

Overview

This module provides the ability to specify the data and/or errors to return when a client is using stubbed responses. Pass :stub_responses => true to a client constructor to enable this behavior.

Defined Under Namespace

Classes: Stub

Instance Method Summary collapse

Instance Method Details

#initialize(*args) ⇒ Object


16
17
18
19
20
# File 'aws-sdk-core/lib/aws-sdk-core/client_stubs.rb', line 16

def initialize(*args)
  @stubs = {}
  @stub_mutex = Mutex.new
  super
end

#stub_responses(operation_name, *stubs) ⇒ void

This method returns an undefined value.

Configures what data / errors should be returned from the named operation when response stubbing is enabled.

Basic usage

By default, fake responses are generated. You can override the default fake data with specific response data by passing a hash.

# enable response stubbing in the client constructor
client = Aws::S3::Client.new(stub_responses: true)

# specify the response data for #list_buckets
client.stub_responses(:list_buckets, buckets:[{name:'aws-sdk'}])

# no api calls made, stub returned
client.list_buckets.map(&:name)
#=> ['aws-sdk']

Stubbing Errors

When stubbing is enabled, the SDK will default to generate fake responses with placeholder values. You can override the data returned. You can also specify errors it should raise.

client.stub_responses(:get_object, 'NotFound')
client.get_object(bucket:'aws-sdk', key:'foo')
#=> raises Aws::S3::Errors::NotFound

client.stub_responses(:get_object, Timeout::Error)
client.get_object(bucket:'aws-sdk', key:'foo')
#=> raises new Timeout::Error

client.stub_responses(:get_object, RuntimeError.new('custom message'))
client.get_object(bucket:'aws-sdk', key:'foo')
#=> raises the given runtime error object

Stubbing Multiple Responses

Calling an operation multiple times will return similar responses. You can configure multiple stubs and they will be returned in sequence.

client.stub_responses(:head_object, [
  'NotFound',
  { content_length: 150 },
])

client.head_object(bucket:'aws-sdk', key:'foo')
#=> raises Aws::S3::Errors::NotFound

resp = client.head_object(bucket:'aws-sdk', key:'foo')
resp.content_length #=> 150

Raises:

  • (RuntimeError)

    Raises a runtime error when called on a client that has not enabled response stubbing via :stub_responses => true.


82
83
84
85
86
87
88
89
90
# File 'aws-sdk-core/lib/aws-sdk-core/client_stubs.rb', line 82

def stub_responses(operation_name, *stubs)
  if config.stub_responses
    apply_stubs(operation_name, stubs.flatten)
  else
    msg = 'stubbing is not enabled; enable stubbing in the constructor '
    msg << 'with `:stub_responses => true`'
    raise msg
  end
end