class Faraday::Adapter::Test

@example

test = Faraday::Connection.new do
  use Faraday::Adapter::Test do |stub|
    # Define matcher to match the request
    stub.get '/resource.json' do
      # return static content
      [200, {'Content-Type' => 'application/json'}, 'hi world']
    end

    # response with content generated based on request
    stub.get '/showget' do |env|
      [200, {'Content-Type' => 'text/plain'}, env[:method].to_s]
    end

    # A regular expression can be used as matching filter
    stub.get /\A\/items\/(\d+)\z/ do |env, meta|
      # in case regular expression is used, an instance of MatchData
      # can be received
      [200,
       {'Content-Type' => 'text/plain'},
       "showing item: #{meta[:match_data][1]}"
      ]
    end
  end
end

resp = test.get '/resource.json'
resp.body # => 'hi world'

resp = test.get '/showget'
resp.body # => 'get'

resp = test.get '/items/1'
resp.body # => 'showing item: 1'

resp = test.get '/items/2'
resp.body # => 'showing item: 2'

Attributes

stubs[RW]

Public Class Methods

new(app, stubs = nil, &block) click to toggle source
Calls superclass method Faraday::Adapter::new
# File lib/faraday/adapter/test.rb, line 203
def initialize(app, stubs = nil, &block)
  super(app)
  @stubs = stubs || Stubs.new
  configure(&block) if block
end

Public Instance Methods

call(env) click to toggle source
Calls superclass method Faraday::Adapter#call
# File lib/faraday/adapter/test.rb, line 213
def call(env)
  super
  host = env[:url].host
  normalized_path = Faraday::Utils.normalize_path(env[:url])
  params_encoder = env.request.params_encoder ||
                   Faraday::Utils.default_params_encoder

  stub, meta = stubs.match(env[:method], host, normalized_path,
                           env.request_headers, env[:body])

  unless stub
    raise Stubs::NotFound, "no stubbed request for #{env[:method]} "\
                           "#{normalized_path} #{env[:body]}"
  end

  env[:params] = if (query = env[:url].query)
                   params_encoder.decode(query)
                 else
                   {}
                 end
  block_arity = stub.block.arity
  status, headers, body =
    if block_arity >= 0
      stub.block.call(*[env, meta].take(block_arity))
    else
      stub.block.call(env, meta)
    end
  save_response(env, status, body, headers)

  @app.call(env)
end
configure() { |stubs| ... } click to toggle source
# File lib/faraday/adapter/test.rb, line 209
def configure
  yield(stubs)
end