Stub JSON.parse ใน RSPEC

ฉันกำลังทำการทดสอบ RSPEC ที่นี่

หากฉันมีวิธีนี้:

JSON.parse("https://test.com/return_json/reviews.json")

จากนั้นฉันก็สามารถสรุป RSPEC ได้เช่น:

test_reviews = {"reviews" => [{"data1" => "1", "data2"=> "2"}]}
allow(JSON).to receive(:parse).and_return(test_reviews.to_json)

แต่สำหรับประเภทนี้ (ด้วยวิธีอื่นภายใน (to_uri & read))

JSON.parse("https://test.com/return_json/reviews.json".to_uri.read)

ฉันพยายามใช้ receive_message_chain แต่ไม่ประสบความสำเร็จ

ขอบคุณล่วงหน้าครับ!


person aldrien.h    schedule 08.03.2019    source แหล่งที่มา


คำตอบ (1)


รหัสของคุณไม่ได้เรียก URL ของคุณจริงๆ คุณต้องทำการเรียก http และแยกวิเคราะห์เนื้อหา ฉันคงจะหน้าตาแบบนี้

describe :ReviewsController
  let(:uri) { URI('https://test.com/return_json/reviews.json') }
  let(:reviews) { {"reviews" => [{"data1" => "1", "data2"=> "2"}]} }

  before do 
    stub_request(:get, uri).
      with(headers: {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
      to_return(status: 200, body: JSON.dump(reviews), headers: {})
  end

  it 'does whatever you want' do
    response = Net::HTTP.get(uri)
    expect(JSON.parse(response.body)['data1']).to eq('1') # or whatever you want to test
  end
end

อธิบายไว้ดีกว่าที่นี่

person Antarr Byrd    schedule 08.03.2019