Matikan JSON.parse di RSPEC

Saya sedang melakukan beberapa pengujian RSPEC di sini.

Jika saya memiliki metode ini:

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

Lalu saya bisa mematikannya RSPEC seperti:

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

Tapi untuk jenis ini (dengan metode lain di dalam (to_uri & read)).

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

Saya mencoba menggunakan receive_message_chain tetapi tidak berhasil.

Terima kasih sebelumnya kawan!


person aldrien.h    schedule 08.03.2019    source sumber


Jawaban (1)


Kode Anda sebenarnya tidak memanggil url Anda. Anda perlu melakukan panggilan http dan mengurai isi. Saya mungkin harus terlihat seperti ini.

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

Penjelasannya lebih baik di sini.

person Antarr Byrd    schedule 08.03.2019