0

I have existing functionality, where specs calls HTTP PUT method of a controller, which in-turn calls model's method to get some JSON data via. API.

class SomeModel
  def GetData()
    uri = URI.parse('http://api.mydomain.com/getmydata/123/ohmyurl')
    Net::HTTP.start(uri.host, uri.port, :read_timeout => 200) do |http|
      request = Net::HTTP::Get.new(uri.request_uri)
      response = http.request(request)
      unless response.body == "null"
        return JSON.parse(response.body)
      end
      #......
    end
  end
end

class SomeController < ApplicationController
  def update
    #...
    @model.GetData()
    #...
  end
end

#......specs............

put :update

I need to mock the API in SomeModel. So far I have tried:

#......specs............

    before do
        stub_request(:get, /api.mydomain.com/)
            .with(headers: {'Accept'=>'application/json' })
            .to_return(status: 200, body: {id: 1, secondParam: '324'}.to_json, headers: {})

    end

#.......

    put :update
    result = JSON.load response.body
    expect(result['secondParam']).to eq("324")

Which is not able to mock the API call and actual API is called.

kindly ignore syntax errors

G J
  • 477
  • 9
  • 23

0 Answers0