hacker / welder / mechanic / carpenter / photographer / musician / writer / teacher / student
Musings of an Earth-bound carbon-based life form.
When using Faraday for testing you can use its built-in test
adapter which
lets you stub HTTP responses for the URLs that you specify. I learned today that
if you already have an adapter registered, say the Faraday::Adapter::NetHttp
adapter, you need to remove it from the builder or else you will have unexpected
behavior when making fake HTTP calls.
You can remove the previous adapter from the builder like such:
# A module to generate a client with a base URL and adapter
module API
def self.client(api_url)
Faraday.new(:url => api_url) do |faraday|
faraday.use Faraday::Response::RaiseError
faraday.request :url_encoded
faraday.adapter Faraday.default_adapter
faraday.headers['Content-Type'] = 'application/json'
end
end
end
let(:fake_faraday) {
client = API.client('http://fake.host:8080')
# Remove the default NetHttp adapter before adding the test adapter
client.builder.delete(Faraday::Adapter::NetHttp)
client.adapter :test, http_stubs
client
}
let(:http_stubs) { Faraday::Adapter::Test::Stubs.new }