Ini tahun 2020 - tidak ada yang boleh menggunakan Net::HTTP
lagi dan semua jawaban sepertinya mengatakan demikian, gunakan permata yang lebih tinggi seperti Faraday - Github
Yang mengatakan, yang ingin saya lakukan adalah membungkus panggilan api HTTP, sesuatu yang disebut seperti
rv = Transporter::FaradayHttp[url, options]
karena ini memungkinkan saya untuk memalsukan panggilan HTTP tanpa ketergantungan tambahan, yaitu:
if InfoSig.env?(:test) && !(url.to_s =~ /localhost/)
response_body = FakerForTests[url: url, options: options]
else
conn = Faraday::Connection.new url, connection_options
Dimana si penipu terlihat seperti ini
Saya tahu ada kerangka kerja HTTP mocking / stubbing, tetapi setidaknya ketika saya meneliti terakhir kali mereka tidak mengizinkan saya untuk memvalidasi permintaan secara efisien dan mereka hanya untuk HTTP, bukan misalnya untuk pertukaran TCP mentah, sistem ini memungkinkan saya untuk memiliki kerangka kerja terpadu untuk semua komunikasi API.
Dengan asumsi Anda hanya ingin cepat & kotor mengonversi hash ke json, kirim json ke host jarak jauh untuk menguji API dan mengurai respons ke ruby, ini mungkin cara tercepat tanpa melibatkan permata tambahan:
JSON.load `curl -H 'Content-Type:application/json' -H 'Accept:application/json' -X POST localhost:3000/simple_api -d '#{message.to_json}'`
Mudah-mudahan ini tidak perlu dikatakan lagi, tapi jangan gunakan ini dalam produksi.
req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})