Class: Faraday::Adapter::Test

Inherits:
Faraday::Adapter show all
Defined in:
lib/faraday/adapter/test.rb

Overview

Examples:

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'

Defined Under Namespace

Classes: Stub, Stubs

Constant Summary

Constants inherited from Faraday::Adapter

CONTENT_LENGTH

Instance Attribute Summary collapse

Attributes included from DependencyLoader

#load_error

Attributes included from Parallelism

#supports_parallel

Instance Method Summary collapse

Methods included from MiddlewareRegistry

#fetch_middleware, #load_middleware, #lookup_middleware, #middleware_mutex, #register_middleware, #unregister_middleware

Methods included from DependencyLoader

#dependency, #inherited, #loaded?, #new

Methods included from Parallelism

#inherited, #supports_parallel?

Methods included from Faraday::AutoloadHelper

#all_loaded_constants, #autoload_all, #load_autoloaded_constants

Constructor Details

#initialize(app, stubs = nil, &block) ⇒ Test

Returns a new instance of Test.



203
204
205
206
207
# 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

Instance Attribute Details

#stubsObject

Returns the value of attribute stubs.



43
44
45
# File 'lib/faraday/adapter/test.rb', line 43

def stubs
  @stubs
end

Instance Method Details

#call(env) ⇒ Object



213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# 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| ... } ⇒ Object

Yields:



209
210
211
# File 'lib/faraday/adapter/test.rb', line 209

def configure
  yield(stubs)
end