Следуя коду stub_responses
, вы получаете convert_stub
. Кажется, есть три жизнеспособных варианта, чтобы высмеивать ответы с помощью: Proc
, Hash
и оператора else
.
def convert_stub(operation_name, stub)
case stub
when Proc then stub
when Exception, Class then { error: stub }
when String then service_error_stub(stub)
when Hash then http_response_stub(operation_name, stub)
else { data: stub }
end
end
source
In примеры насмешек ниже, у меня есть AWS настройки клиента как таковые.
aws_credentials = {
region: 'us-east-1',
access_key_id: Rails.application.secrets.aws_key,
secret_access_key: Rails.application.secrets.aws_secret,
stub_responses: Rails.env.test?
}
LAMBDA_CLIENT = Aws::Lambda::Client.new(aws_credentials)
Mocking Aws :: Lambda :: Types :: InvocationResponse
Оператор else
позволяет вам по существу вернуть тот же объект обратно. Таким образом, лучший способ смутить ответ - использовать тот же класс, который используется за пределами тестовой среды. Aws::Lambda::Types::InvocationResponse
context do
before do
LAMBDA_CLIENT.stub_responses(
:invoke,
Aws::Lambda::Types::InvocationResponse.new(
executed_version: "$LATEST",
function_error: nil,
log_result: nil,
payload: StringIO.new("hello".to_json),
status_code: 200
)
)
end
it { ... }
end
Насмешка над HTTP-ответом
Следуя логике c использования Hash
, нам нужно выяснить, что http_response_stub
делает.
def http_response_stub(operation_name, data)
if Hash === data && data.keys.sort == [:body, :headers, :status_code]
{ http: hash_to_http_resp(data) }
else
{ http: data_to_http_resp(operation_name, data) }
end
end
источник
Очевидно, они ищут Hash
со следующими клавишами [:body, :headers, :status_code]
context do
before do
LAMBDA_CLIENT.stub_responses(
:invoke,
{
body: {testing: true}.to_json,
headers: {},
status_code: 200
}
)
end
it { ... }
end