Я использую Webmock для тестирования http-запросов, сделанных ruby aws-sdk (в данном случае aws-sdk-batch).
Webmock обрабатывает запросы json с помощью гораздо более удобного diff хеша и частичное совпадение , когда запросы терпят неудачу, но это будет происходить только в том случае, если Content-Type
заготовленного запроса application/json
.
Однако гем aws-sdk-batch
создает запрос с пустым Content-type
( несмотря на то, что задокументировал тип содержимого как application / json ) и, похоже, полагается на поведение конечной точки по умолчанию для интерпретации этого как application/json
.
Я хотел бы вручнуюдобавьте заголовок Content-type: application/json
, чтобы я мог извлечь выгоду из лучшей обработки Webmock тела запроса json.Возможно ли это?
Пример ответа Webmock без указания Content-Type:application/json
:
WebMock::NetConnectNotAllowedError:
Real HTTP connections are disabled. Unregistered request: POST https://batch.us-east-1.amazonaws.com/v1/submitjob with body '{"jobName":"Fakie","jobQueue":"queue","jobDefinition":"def","parameters":{"task":"{\"fake\":\"town\"}"}}' with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'', 'Authorization'=>'AWS4-HMAC-SHA256 Credential=ACCESS_KEY_ID/20190701/us-east-1/batch/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=5f4bf85ba48333e6cda6ff613b4ea2faacd0417b4136621c58b87a488c3019ee', 'Content-Length'=>'106', 'Content-Type'=>'', 'Host'=>'batch.us-east-1.amazonaws.com', 'User-Agent'=>'aws-sdk-ruby3/3.54.2 ruby/2.5.5 x86_64-darwin18 aws-sdk-batch/1.20.0', 'X-Amz-Content-Sha256'=>'cf52595364d1a588b4ca4fdeaddb8170e4ad944fa28ac6df647484bb596de9c4', 'X-Amz-Date'=>'20190701T215756Z'}
You can stub this request with the following snippet:
stub_request(:post, "https://batch.us-east-1.amazonaws.com/v1/submitjob").
with(
body: "{\"jobName\":\"Fakie\",\"jobQueue\":\"quue\",\"jobDefinition\":\"def\",\"parameters\":{\"task\":\"{\\\"fake\\\":\\\"town\\\"}\"}}",
headers: {
'Accept'=>'*/*',
'Accept-Encoding'=>'',
'Authorization'=>'AWS4-HMAC-SHA256 Credential=ACCESS_KEY_ID/20190701/us-east-1/batch/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=5f4bf85ba48333e6cda6ff613b4ea2faacd0417b4136621c58b87a488c3019ee',
'Content-Length'=>'106',
'Content-Type'=>'',
'Host'=>'batch.us-east-1.amazonaws.com',
'User-Agent'=>'aws-sdk-ruby3/3.54.2 ruby/2.5.5 x86_64-darwin18 aws-sdk-batch/1.20.0',
'X-Amz-Content-Sha256'=>'cf52595364d1a588b4ca4fdeaddb8170e4ad944fa28ac6df647484bb596de9c4',
'X-Amz-Date'=>'20190701T215756Z'
}).
to_return(status: 200, body: "", headers: {})
registered request stubs:
stub_request(:post, "https://batch.us-east-1.amazonaws.com/v1/submitjob").
with(
body: {"jobDefinition"=>"def", "jobName"=>"Wrong", "jobQueue"=>"queue", "parameters"=>{"task"=>"{\"fake\":\"town\"}"}})
Как вы можете увидеть, когда эти тесты не пройдены для строк, у вас осталась мучительная задачавыбирая тело персонажа за персонажем, что является довольно ужасным опытом для разработчиков.Опыт Hashdiff намного выше.