Я пытаюсь написать тесты rspec.Некоторым из них необходимо заблокировать вызовы внешней службы.
Некоторые из этих вызовов отправляют вложенные данные, и эти данные никогда не обрабатываются Webmock правильно.
describe 'calc' do
before do
stub_request(:any, url).with(body: hash_including(operation: 'calc'))
end
it 'works' do
request_data = { sale_type: 'money', cover_type: 'money',
region: 'rf', period: 9,
adults: 600, children: 750, mice: 500 }
# This thing makes a HTTP request:
MiteService.new(login_params).calc(request_data)
expected_body = { operation: 'calc', product: 'mite3',
sessionID: session, data: request_data }
expect(WebMock).to have_requested(:post, url).with(body: expected_body)
end
end
Ожидается, что этот тест ожидаетсяпройти.Вызов службы HTTP, выполненный службой, кажется правильным, но Webmock не может прочитать вложенные данные (в данном случае это data
часть тела).
1) MiteService API calls calc works
Failure/Error: expect(WebMock).to have_requested(:post, url).with(body: expected_body)
The request POST http://example.com/api with body {"data"=>{"sale_type"=>"money", "cover_type"=>"money", "region"=>"rf", "period"=>9, "adults"=>600, "children"=>750, "mice"=>500}, "operation"=>"calc", "product"=>"mite3", "sessionID"=>"123"} was expected to execute 1 time but it executed 0 times
The following requests were made:
<...>
POST http://example.com/api with body 'operation=calc&product=mite3&sessionID=123&data=%7B%3Asale_type%3D%3E%22money%22%2C+%3Acover_type%3D%3E%22money%22%2C+%3Aregion%3D%3E%22rf%22%2C+%3Aperiod%3D%3E9%2C+%3Aadults%3D%3E600%2C+%3Achildren%3D%3E750%2C+%3Amice%3D%3E500%7D' with headers {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded', 'Date'=>'Tue, 25 Dec 2018 08:20:32 GMT', 'User-Agent'=>'HTTPClient/1.0 (2.8.3, ruby 2.4.1 (2017-03-22))'} was made 1 time