É 2020 - ninguém deveria usar Net::HTTP
mais e todas as respostas parecem dizer isso, use uma joia de nível mais alto, como Faraday - Github
Dito isso, o que eu gosto de fazer é um invólucro em torno da chamada da API HTTP, algo que se chama como
rv = Transporter::FaradayHttp[url, options]
porque isso me permite falsificar chamadas HTTP sem dependências adicionais, ou seja:
if InfoSig.env?(:test) && !(url.to_s =~ /localhost/)
response_body = FakerForTests[url: url, options: options]
else
conn = Faraday::Connection.new url, connection_options
Onde o falsificador se parece com isso
Eu sei que existem frameworks HTTP mocking / stubbing, mas pelo menos quando eu pesquisei da última vez eles não me permitiram validar as solicitações de forma eficiente e eram apenas para HTTP, não por exemplo para trocas TCP brutas, este sistema me permite ter um estrutura unificada para todas as comunicações API.
Supondo que você deseja apenas uma conversão rápida e suja de um hash em json, envie o json a um host remoto para testar uma API e analisar a resposta para ruby, esta é provavelmente a maneira mais rápida sem envolver joias adicionais:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Esperançosamente, nem é preciso dizer, mas não use isso na produção.
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})