Classes and Modules
VERSION = '1.3.0'

Returns the version string for the copy of FakeWeb you have loaded.

Class Public methods

Enables or disables real HTTP connections for requests that don’t match registered URIs.

If you set FakeWeb.allow_net_connect = false and subsequently try to make a request to a URI you haven’t registered with #register_uri, a NetConnectNotAllowedError will be raised. This is handy when you want to make sure your tests are self-contained, or want to catch the scenario when a URI is changed in implementation code without a corresponding test change.

When FakeWeb.allow_net_connect = true (the default), requests to URIs not stubbed with FakeWeb are passed through to Net::HTTP.

If you assign a String, URI, or Regexp object, unstubbed requests will be allowed if they match that value. This is useful when you want to allow access to a local server for integration testing, while still preventing your tests from using the internet.

    # File lib/fake_web.rb, line 41
41:   def self.allow_net_connect=(allowed)
42:     case allowed
43:     when String, URI, Regexp
44:       @allow_all_connections = false
45:       Registry.instance.register_passthrough_uri(allowed)
46:     else
47:       @allow_all_connections = allowed
48:       Registry.instance.remove_passthrough_uri
49:     end
50:   end
allow_net_connect?(uri = nil)

Returns true if requests to URIs not registered with FakeWeb are passed through to Net::HTTP for normal processing (the default). Returns false if an exception is raised for these requests.

If you’ve assigned a String, URI, or Regexp to FakeWeb.allow_net_connect=, you must supply a URI to check against that filter. Otherwise, an ArgumentError will be raised.

    # File lib/fake_web.rb, line 62
62:   def self.allow_net_connect?(uri = nil)
63:     if Registry.instance.passthrough_uri_map.any?
64:       raise ArgumentError, "You must supply a URI to test" if uri.nil?
65:       Registry.instance.passthrough_uri_matches?(uri)
66:     else
67:       @allow_all_connections
68:     end
69:   end

Resets the FakeWeb Registry. This will force all subsequent web requests to behave as real requests.

    # File lib/fake_web.rb, line 20
20:   def self.clean_registry
21:     Registry.instance.clean_registry
22:   end

Returns the request object from the last request made via Net::HTTP.

     # File lib/fake_web.rb, line 196
196:   def self.last_request
197:     @last_request
198:   end
FakeWeb.register_uri(method, uri, options)

Register requests using the HTTP method specified by the symbol method for uri to be handled according to options. If you specify the method :any, the response will be reigstered for any request for uri. uri can be a String, URI, or Regexp object. options must be either a Hash or an Array of Hashes (see below), which must contain one of these two keys:


A string which is used as the body of the response. If the string refers to a valid filesystem path, the contents of that file will be read and used as the body of the response instead. (This used to be two options, :string and :file, respectively. These are now deprecated.)


Either a Net::HTTPResponse, an IO, or a String which is used as the full response for the request.

The easier way by far is to pass the :response option to register_uri as a String or an (open for reads) IO object which will be used as the complete HTTP response, including headers and body. If the string points to a readable file, this file will be used as the content for the request.

To obtain a complete response document, you can use the curl command, like so:

  curl -i >

which can then be used in your test environment like so:

  FakeWeb.register_uri(:get, "", :response => "")

See the Net::HTTPResponse documentation for more information on creating custom response objects.

options may also be an Array containing a list of the above-described Hash. In this case, FakeWeb will rotate through each response. You can optionally repeat a response more than once before rotating:


The number of times this response will be used before moving on to the next one. The last response will be repeated indefinitely, regardless of its :times parameter.

Two optional arguments are also accepted:


Passing :status as a two-value array will set the response code and message. The defaults are 200 and OK, respectively. Example:

  FakeWeb.register_uri(:get, "", :body => "Go away!", :status => [404, "Not Found"])

The argument passed via :exception will be raised when the specified URL is requested. Any Exception class is valid. Example:

  FakeWeb.register_uri(:get, "", :exception => Net::HTTPError)

If you’re using the :body response type, you can pass additional options to specify the HTTP headers to be used in the response. Example:

  FakeWeb.register_uri(:get, "", :body => "Hello", :content_type => "text/plain")

You can also pass an array of header values to include a header in the response more than once:

  FakeWeb.register_uri(:get, "", :set_cookie => ["name=value", "example=1"])
     # File lib/fake_web.rb, line 150
150:   def self.register_uri(*args)
151:     case args.length
152:     when 3
153:       Registry.instance.register_uri(*args)
154:     when 2
155:       print_missing_http_method_deprecation_warning(*args)
156:       Registry.instance.register_uri(:any, *args)
157:     else
158:       raise"wrong number of arguments (#{args.length} for 3)")
159:     end
160:   end
FakeWeb.registered_uri?(method, uri)

Returns true if a method request for uri is registered with FakeWeb. Specify a method of :any to check against all HTTP methods.

     # File lib/fake_web.rb, line 183
183:   def self.registered_uri?(*args)
184:     case args.length
185:     when 2
186:       Registry.instance.registered_uri?(*args)
187:     when 1
188:       print_missing_http_method_deprecation_warning(*args)
189:       Registry.instance.registered_uri?(:any, *args)
190:     else
191:       raise"wrong number of arguments (#{args.length} for 2)")
192:     end
193:   end