Sorry for the title, I'm too frustrated to come up with anything better right now.
I have a class, Judge, which has a method #stats. This stats method is supposed to send a GET request to an api and get some data as response. I'm trying to test this and stub the stats method so that I don't perform an actual request. This is what my test looks like:
describe Judge do
  describe '.stats' do
    context 'when success' do
      subject { Judge.stats }
      it 'returns stats' do
        allow(Faraday).to receive(:get).and_return('some data')
        expect(subject.status).to eq 200
        expect(subject).to be_success
      end
    end
  end
end
This is the class I'm testing:
class Judge
  def self.stats
    Faraday.get "some-domain-dot-com/stats"
  end
end
This currently gives me the error: Faraday does not implement: get
So How do you stub this with faraday? I have seen methods like:
    stubs = Faraday::Adapter::Test::Stubs.new do |stub|
      stub.get('http://stats-api.com') { [200, {}, 'Lorem ipsum'] }
    end
But I can't seem to apply it the right way. What am I missing here?
Coming to this late, but incase anyone else is too, this is what worked for me - a combination of the approaches above:
  let(:json_data) { File.read Rails.root.join("..", "fixtures", "ror", "501100000267.json") }
  before do
    allow_any_instance_of(Faraday::Connection).to receive(:get).and_return(
      double(Faraday::Response, status: 200, body: json_data, success?: true)
    )
  end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With