Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby stubbing with faraday, can't get it to work

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?

like image 244
Majoren Avatar asked Feb 26 '14 18:02

Majoren


1 Answers

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
like image 161
Paul Danelli Avatar answered Oct 04 '22 06:10

Paul Danelli