Skip to content

Ruby

The CloudMock Ruby SDK auto-manages the server lifecycle:

require "cloudmock"
cm = CloudMock.start
s3 = Aws::S3::Client.new(cm.aws_config)
# ... use s3 client
cm.stop

Install: gem install cloudmock

require "aws-sdk-s3"
require "aws-sdk-dynamodb"
Aws.config.update(
endpoint: "http://localhost:4566",
region: "us-east-1",
credentials: Aws::Credentials.new("test", "test")
)
s3 = Aws::S3::Client.new(force_path_style: true)
s3.create_bucket(bucket: "test-bucket")
s3.put_object(bucket: "test-bucket", key: "hello.txt", body: "world")
ddb = Aws::DynamoDB::Client.new
ddb.create_table(
table_name: "users",
key_schema: [{ attribute_name: "pk", key_type: "HASH" }],
attribute_definitions: [{ attribute_name: "pk", attribute_type: "S" }],
billing_mode: "PAY_PER_REQUEST"
)
ddb.put_item(
table_name: "users",
item: { "pk" => "user-1", "name" => "Alice" }
)
require "minitest/autorun"
require "cloudmock"
require "aws-sdk-s3"
class AWSTest < Minitest::Test
def setup
@cm = CloudMock.start
@s3 = Aws::S3::Client.new(@cm.aws_config)
end
def teardown
@cm.stop
end
def test_s3_bucket
@s3.create_bucket(bucket: "test")
resp = @s3.list_buckets
assert resp.buckets.any? { |b| b.name == "test" }
end
end
require "cloudmock"
RSpec.configure do |config|
config.before(:suite) do
$cm = CloudMock.start
end
config.after(:suite) do
$cm.stop
end
end
RSpec.describe "S3" do
let(:s3) { Aws::S3::Client.new($cm.aws_config) }
it "creates a bucket" do
s3.create_bucket(bucket: "test")
expect(s3.list_buckets.buckets.map(&:name)).to include("test")
end
end