Test your custom adapter

Faraday puts a lot of expectations on adapters, but it also provides you with useful tools to test your adapter against those expectations. This guide will walk you through the process of testing your adapter.

The adapter test suite

Faraday provides a test suite that you can use to test your adapter. The test suite is located in the spec/external_adapters/faraday_specs_setup.rb.

All you need to do is to require 'faraday_specs_setup' in your adapter’s spec_helper.rb file. This will load the an adapter shared example group that you can use to test your adapter.

require 'faraday_specs_setup'

RSpec.describe Faraday::Adapter::FlorpHttp do
  it_behaves_like 'an adapter'

  # You can then add any other test specific to this adapter here...
end

Testing optional features

By default, an adapter will test your adapter against the required behaviour for an adapter. However, there are some optional “features” that your adapter can implement, like parallel requests or streaming.

If your adapter implements any of those optional features, you can test it against those extra expectations by calling the features method:

RSpec.describe Faraday::Adapter::MyAdapter do
  # Since not all adapters support all the features Faraday has to offer, you can use
  # the `features` method to turn on only the ones you know you can support.
  features :request_body_on_query_methods,
           :compression,
           :streaming

  # Runs the tests provide by Faraday, according to the features specified above.
  it_behaves_like 'an adapter'

  # You can then add any other test specific to this adapter here...
end

Available features

Feature Description
‘:compression` Tests that your adapter can handle ‘gzip` and `deflate` compressions.
‘:local_socket_binding` Tests that your adapter supports binding to a local socket via the ‘:bind` request option.
‘:parallel` Tests that your adapter supports parallel requests. See [Parallel requests] for more details.
‘:reason_phrase_parse` Tests that your adapter supports parsing the ‘reason_phrase` from the response.
‘:request_body_on_query_methods` Tests that your adapter supports sending a request body on ‘GET`, `HEAD`, `DELETE` and `TRACE` requests.
‘:streaming` Tests that your adapter supports streaming responses. See [Streaming] for more details.
‘:trace_method` Tests your adapter against the ‘TRACE` HTTP method.