All 112 versions

Version Release date
3.3.0 January 18, 2018
  • Better formatting of outputted request stub snippets, displayed on failures due to unstubbed requests.

    Thanks to Olia Kremmyda

3.2.1 January 04, 2018
3.2.0 January 03, 2018
  • Automatically disable WebMock after Rspec suite

    Thanks to Micha?? Matyas

  • Fixed bug when handling redirection using Curb.

    Thanks to Olia Kremmyda

3.1.1 November 19, 2017
  • Warning message is displayed only once when adding query params to URIAddressablePattern.
3.1.0 October 07, 2017
  • http.rb 3.0.0 compatibility

    Thanks to Piotr Boniecki

  • Typhoeus 1.3.0 support

    Thanks to NARUSE, Yui

  • Added support for matching partial query params using hash_excluding

    stub_request(:get, "").
      with(query: hash_excluding({"a" => "b"}))
    RestClient.get("")    # ===> Failure
    RestClient.get("")    # ===> Success

    Thanks to Olexandr Hoshylyk

  • Added MRI 2.3+ frozen string literal compatibility

    Thanks to Pat Allan

  • Ensured that HTTPClient adapter does not yield block on empty response body if a block is provided

    Thanks to NARUSE, Yui

  • Fixed issue with to_timeout incorrectly raising HTTP::ConnectionError instead of HTTP::TimeoutError when using http.rb

    Thanks to Rick Song

  • Fixed problem with response.connection.close method being undefined when using http.rb

    Thanks to Janko Marohni??

  • Fixed problem with matching Net::HTTP request header values assigned as numbers.

    Thanks to Felipe Constantino de Oliveira for reporting the issue.

  • Fixed problem with Net::HTTP adapter converting empty response body to nil for non 204 responses.

    Thanks to Jeffrey Charles for reporting the issue.

3.0.1 April 12, 2017
  • Suppressed `warning: `&' interpreted as argument prefix`

    Thanks to Koichi ITO

3.0.0 April 12, 2017
  • Dropped support for Ruby 1.9.3

  • Using Ruby >= 1.9 hash key syntax in stub suggestions

    Thanks to Tarmo T??nav

  • Add at_least matchers for fakeweb-style expectations

    Thanks to Joe Marty

  • Fix against "can't modify frozen String' error when Ruby option frozen_string_literal is enabled.

    Thanks to Chris Thomson

  • Handling read_timeout option in Net::HTTP in Ruby >= 2.4

    Thanks to Christof Koenig

  • RequestRegistry fix for RuntimeError - can't add a new key into hash during iteration

    Thanks to Chung-Yi Chi

2.3.2 January 01, 2017
  • Restored support for Ruby 1.9.3 to comply with semantic versioning.

    Thanks to Jordan Harband for reporting the problem.

2.3.1 December 06, 2016
  • Added support for Ruby 2.4

    Thanks to Koichi ITO

  • Dropped support for Ruby 1.9.3

2.3.0 December 04, 2016
  • Added support for Ruby 2.4

    Thanks to Koichi ITO

  • Dropped support for Ruby 1.9.3

2.2.0 December 04, 2016
  • Added refute_requested as an alias for assert_not_requested

    Thanks to Michael Grosser

  • Raising Net::OpenTimeout instead of Timeout::Error if available when a request stub is declared to_timeout

    Thanks to Gabe Martin-Dempesy

2.1.0 June 03, 2016
  • Added support for on_debug callback in Curb.

    Thanks to Pavel Jura??ek

  • Added support for PATCH requests using Curb.

    Thanks to Pavel Jura??ek

2.0.3 May 20, 2016
  • Handling headers passed as an Array to Curl::Easy

    Thanks to Chelsea for reporting the issue.

  • Removed Ruby warnings.

    Thanks to Aaron Kromer

2.0.2 May 14, 2016
  • Using Base64.strict_encode64 instead of Base64.encode64 to handle long user:pass basic auth credentials

    Thanks to Jonathan Schatz

  • Fixed handling of Authorisation header provided as string instead of array when using em-http-request.

    Thanks to Michael Richardson for reporing the issue.

  • Ensured WebMock.net_connect_explicit_allowed? always returns boolean.

    Thanks tp Jose Luis Honorato

2.0.1 May 02, 2016
  • Added code responsible for loading em-http-request if available, which has been removed by mistake.

    Thanks to Vasiliy

  • WebMock loads "base64" if it's not yet loaded.

    Thanks to Taiki Ono.

2.0.0 April 25, 2016
  • require 'webmock' does not enable WebMock anymore. gem 'webmock' can now be safely added to a Gemfile and no http client libs will be modified when it's loaded. Call WebMock.enable! to enable WebMock.

    Please note that require 'webmock/rspec', require 'webmock/test_unit', require 'webmock/minitest' and require 'webmock/cucumber' still do enable WebMock.

  • Dropped support for Ruby < 1.9.3

  • Dropped support for em-http-request < 1.0.0

  • WebMock 2.0 does not match basic authentication credentials in the userinfo part of the url, with credentials passed in Authorization: Basic ... header anymore. It now treats the Authorization header and credentials in the userinfo part of a url as two completely separate attributes of a request.

The following stub declaration, which used to work in WebMock 1.x, is not going to work anymore

    stub_request(:get, "")

    Net::HTTP.start('') do |http|
      req ='/')
      req.basic_auth 'user', 'pass'
    end    # ===> Failure

In order to stub a request with basic authentication credentials provided in the Authorization header, please use the following code:

    stub_request(:get, "").with(basic_auth: ['user', 'pass'])


    stub_request(:get, "").
      with(headers: 'Authorization' => "Basic #{ Base64.strict_encode64('user:pass').chomp}")

In order to stub a request with basic authentication credentials provided in the url, please use the following code:

    stub_request(:get, "")

    RestClient.get('')    # ===> Success
2.0.0.beta2 April 25, 2016  
2.0.0.beta1 April 19, 2016  
1.24.6 April 24, 2016
  • Fixed issue with RUBY_VERSION comparison using old RubyGems.

    Thanks to Chris Griego.

  • Support for http.rb >= 2.0.0

1.24.5 April 20, 2016
  • Fixed issue with RUBY_VERSION comparison using old RubyGems.

    Thanks to Chris Griego.

1.24.4 April 19, 2016
  • Fixed the issue with parsing query to a hash with nested array i.e. a[][b][]=one&a[][c][]=two

    Thanks to Tim Diggins for reporting the issue. Thanks to Cedric Pimenta for finding the solution.

1.24.3 April 12, 2016
  • Allow Net:HTTP headers keys to be provided as symbols if RUBY_VERSION >= 2.3.0

    Thanks to Alex Kestner

  • Added a clear message on an attempt to match a multipart encoded request body. WebMock doesn't support requests with multipart body... yet.

  • WebMock.disable_net_connect :allow option, provided as regexp, matches https URIs correctly.

  • WebMock.disable_net_connect :allow option can be set as a url string with scheme, host and port.

    WebMock.disable_net_connect!(:allow => '')

    Thanks to Gabriel Chaney for reporting the issue.

1.24.2 March 02, 2016
1.24.1 February 22, 2016
  • HTTPClient adapter supports reading basic authentication credentials directly from Authorization header.

    Thanks to Michiel Karnebeek

1.24.0 February 18, 2016
  • Enabled support for Curb > 0.8.6
1.23.0 February 17, 2016
  • WebMock.disable_net_connect accepts :allow option with an object that responds to #call, receiving a URI object and returning a boolean:

    blacklist = ['', '', '']
    allowed_sites = lambda{|uri|
      blacklist.none?{|site| }
    WebMock.disable_net_connect!(:allow => allowed_sites)
    RestClient.get('', '/')  # ===> Allowed
    RestClient.get('', '/') # ===> Failure
    RestClient.get('', '/')        # ===> Failure

    Thanks to Pablo Brasero

  • Support for HTTPClient stream responses with body chunks

    Thanks to Cedric Pimenta

1.22.6 January 10, 2016
  • Fixes issue around WebMock restricting Addressable version, based on Ruby 1.8.7 for all versions of Ruby.

    This change inverts that, and forces Ruby 1.8.7 users to specify in thier Gemfile an Addressable version < 2.4.0.

    Thanks to PikachuEXE and Matthew Rudy Jacobs.

1.22.5 January 05, 2016
  • Fixes bug where WebMock tries to alias a method that is deprecated in Ruby Versions > 1.9.2 ('sysread' for class 'StringIO')

    Thanks to Marcos Acosta for discovering this bug.

1.22.3 November 01, 2015
  • Return "effective_url" attribute in Typhoeus::Response

    Thanks to Senya

1.22.2 October 28, 2015
  • Fix: prevents adding an extra =true to urls with parameters without values

    Thanks to David Begin

1.22.1 October 12, 2015
  • Adds Rack as a development dependency and removes require rack/utils in main lib.

    Thanks to Keenan Brock

1.22.0 October 12, 2015

All the credit for preparing this release go to David Begin!

  • Adds Manticore support.

    Thanks to Mike Knepper, David Abdemoulaie

  • Update to Show a hash diff for requests that have stubs with a body.

    Thanks to yurivm

  • Update to mirror Net::HTTP handling of headers as symbols

  • Update to ignore non-comparable-values error when sorting query values, because sorting is just a convience.

    Thanks to Magne Land

  • Covert Boolean values to Strings when using them to define the body of a request.

    Thanks to Krzysztof Rygielski

  • Fixes WebMock's parsing Multibyte characters

    Thanks to Zhao Wen

  • Updates to be compatible with httpclient 2.6.0

  • Converts keys from symbols to strings when for QueryMapper.to_query

    Thanks to Ramon Tayag

  • Restricts http.rb version to 0.7.3 for Ruby 1.8.7

  • Fixes issue emulating em-http-request's handling of multiple requests.

    Thanks to Matt Palmer

  • WebMock requires only the necessary parts of crack to avoid pulling in safe_yaml

    Thanks to Johannes Schlumberger

1.21.0 March 28, 2015
  • Support for http.rb >= 0.8.0

    Thanks to Zachary Anker, Aleksey V. Zapparov

  • Support for http.rb 0.7.0

    Thanks to Mattias Putman

  • Added support for RSpec3-like and_return, and_raise, and_timeout syntax.

    Thanks to Franky Wahl

  • Restricted Curb support up to version 0.8.6. WebMock specs fail with Curb 0.8.7.

1.20.4 November 08, 2014
  • Fixed support for hash_including matcher in RSpec 3
1.20.3 November 04, 2014
  • with method raises error if provided without options hash and without block

  • with and to_return raise an error if invoked with invalid keys in options hash.

1.20.2 November 01, 2014
  • WebMock provides a helpful error message if an incompatible object is given as response body.

    Thanks to Mark Lorenz

1.20.1 November 01, 2014
  • assert_requested and assert_not_requested accept at_least_times and at_most_times options

    Thanks to Dan Buettner

  • Silenced instance variable undefined warnings in Curb adapted.

    Thanks to Sven Riedel

1.20.0 October 21, 2014
1.19.0 September 27, 2014
  • Fixed issue with Excon adapter giving warning message when redirects middleware was enabled.

    Thanks to Theo Hultberg for reporting that.

  • Fixed issue with undefined method 'valid_request_keys' for Excon::Utils:Module

    Thanks to Pablo Jairala

  • Fixed query mapper to encode 'one' => ['1','2'] as 'one[]=1&one[]=2'.

    Thanks to Insoo Buzz Jung

  • Improved cookies support for em-http-request

    Thanks to Carlos Alonso P??rez

  • Fix HTTP Gem adapter to ensure uri attribute is set on response object.

    Thanks to Aleksey V. Zapparov

  • Fixed HTTPClient adapter. The response header now receives request_method, request_uri, and request_query transferred from request header

    Thanks to trlorenz

  • Query mapper supports nested data structures i.e. {"first" => [{"two" => [{"three" => "four"}, "five"]}]}

    Thanks to Alexander Simonov

  • Fixed compatibility with latest versions of Excon which don't define VALID_REQUEST_KEYS anymore.

    Thanks to Pablo Jairala

  • Request method is always a symbol is request signatures. This fixes the issue of WebMock not matching Typhoeus requests with request method defined as string.

    Thanks to Thorbj??rn Hermanse

  • Stubbing instructions which are displayed when no matching stub is found, can be disabled with Config.instance.show_stubbing_instructions = false

    Thanks to Mark Lorenz

  • Notation used for mapping query strings to data structure can be configured i.e. WebMock::Config.instance.query_values_notation = :subscript. This allows setting :flat_array notation which supports duplicated parameter names in query string.

    Thanks to tjsousa

1.18.0 May 12, 2014
  • Updated dependency on Addressable to versions >= 2.3.6

  • Added support for matching uris using RFC 6570 (URI Templates)

      uri_template = "{id}/"
      stub_request(:any, uri_template)

    Thanks to Max Lincoln

  • Fixed content length calculation for Rack responses with UTF8 body

    Thanks to Oleg Gritsenko

  • Add missing Curl::Easy aliases

    Thanks to Hwan-Joon Choi

  • HTTP Gem >= 0.6.0 compatibility

    Thanks to Aleksey V. Zapparov

  • Minitest 4 and 5 compatibility.

    Thanks to SHIBATA Hiroshi

1.17.4 March 01, 2014
  • Update matchers for RSpec 3's matcher protocol

    Thanks to Rob Olson

1.17.3 February 11, 2014
1.17.2 February 01, 2014
  • Support for chunked responses in Curb

    Thanks to Zachary Belzer

  • Fixed handling of request body passed as a hash to

    Thanks to Mason Chang for reporting.

1.17.1 January 16, 2014
1.17.0 January 15, 2014
  • HTTP gem support!

    Thanks to Aleksey V. Zapparov

  • Limited Excon gem requirement to version < 0.30 until the compatibility with version > 0.30.0 is fixed.

    Thanks to Aleksey V. Zapparov

  • Fixed issue where empty query key caused a TypeError

    Thanks to Jon Rowe

  • Handling Typhoeus on_headers and on_body params.

    Thanks to Matt Burke

1.16.1 December 15, 2013
1.16.0 November 17, 2013
  • Allow a Pathname to be passed as a Response body

      stub_request(:get, /
        body: Rails.root.join('test/fixtures/foo.txt')

    Thanks to Ben Pickles

  • hash_including matcher can be initialized with empty keys to match any values.

      stub_request(:post, "").with(:body => hash_including(:a, :b => {'c'}))'', '{"a":"1","b":"c"}', :content_type => 'application/json')

    Thanks to Stefano Uliari

1.15.2 October 30, 2013
1.15.1 October 29, 2013
1.15.0 October 15, 2013
1.14.0 October 03, 2013
  • Handling non UTF-8 characters in query params.

    Thanks to Florian D??tsch for reporting the issue.

  • Added support for request_block param in Excon

    Thanks to Dmitry Gutov for reporting the issue.

  • Fixed compatibility with latest Curb

    Thanks to Ian Lesperance and Matthew Horan

  • Triggering errbacks assynchronously in em-http-request adapter.

    Thanks to Ian Lesperance and Matthew Horan

  • Handling query params with a hashes nested inside arrays.

    Thanks to Ian Asaff

  • Changed NetConnectNotAllowedError to inherit from Exception to allow it to bubble up into a test suite.

    Thanks to Daniel van Hoesel

  • HTTPClient adapter is thread safe.

    Thanks to Tom Beauvais

1.13.0 July 05, 2013
  • Net::HTTP::Persistent compatibility. WebMock doesn't disconnect previously started connections upon a request anymore.
1.12.3 June 28, 2013
  • Fixed issue with handling Addressable::URI with query params passed to Net::HTTP.get_response

    Thanks to Leif Bladt

  • Fixed HTTPClient adapter to not raise an error if a request with multipart body is executed.

1.12.2 June 27, 2013
  • Fixed issue with handling request.path when Addressable::URI is passed to #request instead of URI with Ruby 2.0.

    Thanks to Leif Bladt

  • Accept integers as query param values in request stubs

    i.e. stub_request(:get, /.*/).with(:query => {"a" => 1})

    Thanks to Mitsutaka Mimura

1.12.1 June 26, 2013
  • Fixed Minitest < 5.0 compatibility

    Thanks to Alex Tomlins for reporting the issue.

1.12.0 June 25, 2013
  • Not using Gem spec anymore to check loaded Curb version.

  • WebMock.disable_net_connect! now accepts array of regexps as allow param:

    i.e. WebMock.disable_net_connect!(:allow => [/, /])

    Thanks to Bastien Vaucher

  • Fixed on_header Curb callback behaviour in Curb adapter

    Thanks to Joel Chippindale

  • Fixed aws-sdk compatibility with Ruby 2.0, by supporting continue_timeout accessor on Net::HTTP socket.

    Thanks to Lin Jen-Shin

  • Fixed WebMock::Server to not give "log writing failed. can't be called from trap context" warning with Ruby 2.0

    Thanks to Murahashi Sanemat Kenichi

  • Added support for EM-HTTP-Request streaming data off disk feature.

    Thanks to Lin Jen-Shin

  • Added compatibility with Minitest 5

    Thanks to Tim Kurvers

  • Excon >= 0.22 compatibility.

  • README has nice sytnax hightlighting and fixed code styling!

    Thanks to Ilya Vassilevsky

  • Compatibility with Rails 4 rack.session.options

    Thanks to gotwalt

1.11.0 March 04, 2013
1.10.2 March 04, 2013
  • '+' in request path is treated as plus, but in query params always as a space.
1.10.1 March 01, 2013
  • '+' in request body is still treated as a space. This fixes a bug introduced in previous version.

    Thanks to Erik Michaels-Ober for reporting this problem.

  • Fixed issue: response body declared as Proc was not evaluated again on subsequent requests.

    Thanks to Rick Fletcher for reporting this issue.

1.10.0 February 28, 2013
  • '+' in query params is not treated as space anymore and is encoded as %2B

    Thanks to goblin for reporting this issue.

  • added remove_request_stub method to the api to allow removing unused stubs i.e.

      stub_get = stub_request(:get, "")
  • assert_requested and assert_not_requested raise an error if a stub object is provided together with a block.

1.9.3 February 20, 2013
  • Fixed issue with unavailable constant Mutex in Ruby < 1.9

    Thanks to Lucas Dohmen for reporting this issue.

1.9.2 February 17, 2013
  • Added support for Excon's :response_block parameter

    Thanks to Myron Marston for reporting this issue.

1.9.1 February 17, 2013
1.9.0 November 07, 2012
  • Added support for Typhoeus >= 0.5.0 and removed support for Typhoeus < 0.5.0.

    Thanks to Hans Hasselberg

1.8.11 September 28, 2012
  • Fix excon adapter to handle :body => some_file_object

    Thanks to Myron Marston

1.8.10 September 09, 2012
  • em-http-request fix. After request callbacks are correctly invoked for 3xx responses, when :redirects option is set.

    Thanks to Myron Marston for reporting that issue.

  • Fixed compatibility with Net::HTTP::DigestAuth

    Thanks to Jonathan Hyman for reporting that issue.

  • Fixed problem in em-http-request 0.x appending the query to the client URI twice.

    Thanks to Pawe?? Pierzcha??a

1.8.9 August 15, 2012
1.8.8 July 23, 2012
  • Fixed Net::HTTP adapter so that it returns nil for an empty body response.

    Thanks to Myron Marston

  • Gemspec defines compatibility with Addressable ~> 2.2.8, not >= 2.3.0

  • Specs compatibility with Typhoeus 0.4.0

    Thanks to Hans Hasselberg

  • Handling content types that specify a charset

    Thanks to Kevin Glowacz

  • Fixed em-http-request adapter to correctly fetch authorization header from a request

    Thanks to Julien Boyer

  • Fixing travis-ci image to report master's status

    Thanks to Ryan Schlesinger

  • Fixed problem with em-http-request callback triggering if there were other EM::Deferred callbacks registered

    Thanks to Jon Leighton

  • Fixed problem with em-http-request appending the query to the URI a second time, and the parameters are repeated.

    Thanks to Jon Leighton

1.8.7 May 12, 2012
  • Compatibility with RSpec >= 2.10

    Thanks to erwanlr for reporting this issue.

  • Add missing required rack environment variable SCRIPT_NAME

    Thanks to Eric Oestrich

  • Fixed warnings due to @query_params not being initialized

    Thanks to Ben Bleything

1.8.6 April 04, 2012
  • Pass through SERVER_PORT when stubbing to rack

    Thanks to Eric Oestrich

  • Fixed problem with missing parenthesis in WebMock#net_connect_allowed? conditions.

    Thanks to aindustries

1.8.5 March 30, 2012
  • WebMock::RackResponse supports basic auth

    Thanks to jugyo

1.8.4 March 19, 2012
  • Warning message is printed when an unsupported version of a http library is loaded.

    Thanks to Alexander Staubo for reporting the problem and to Myron Marston for a help with solution.

1.8.3 March 15, 2012
  • Fixed compatibility with latest em-http-request

    Thanks to Paul Cortens

1.8.2 March 07, 2012
  • Prevent Webmock hash_including from overriding RSpec version 1 hash_including method.

    Thanks to Joe Karayusuf

  • Ensured WebMock handles RSpec 1 hash_including matcher for matching query params and body.

1.8.1 March 05, 2012
  • Ensured WebMock doesn't interfere with em-synchrony, when em-synchrony/em-http is not included.

    Thanks to Nick Recobra

  • Improved README

    Thanks to Jordan Elver

1.8.0 February 20, 2012
  • Matching request body against partial hash.

      stub_http_request(:post, "").
              with(:body => hash_including({:data => {:a => '1', :b => 'five'}}))
 '', "data[a]=1&data[b]=five&x=1",
      :content_type => 'application/x-www-form-urlencoded')    # ===> Success
      request(:post, "").
      with(:body => hash_including({:data => {:a => '1', :b => 'five'}}),
      :headers => 'Content-Type' => 'application/json').should have_been_made         # ===> Success

    Thanks to Marnen Laibow-Koser for help with this solution

  • Matching request query params against partial hash.

      stub_http_request(:get, "").with(:query => hash_including({"a" => ["b", "c"]}))
      RestClient.get("[]=b&a[]=c&x=1") # ===> Success
      request(:get, "").
        with(:query => hash_including({"a" => ["b", "c"]})).should have_been_made  # ===> Success
  • Added support for Excon.

    Thanks to Dimitrij Denissenko

  • Added support for setting expectations on the request stub with assert_requested

      stub_get = stub_request(:get, "")
      stub_post = stub_request(:post, "")
      Net::HTTP.get('', '/')

    Thanks to Nicolas Fouch??

  • WebMock.disable_net_connect! accepts RegExp as :allow parameter

    Thanks to Frank Schumacher

  • Ensure multiple values for the same header can be recorded and played back

    Thanks to Myron Marston

  • Updated dependency on Addressable to version >= 2.2.7 to handle nested hash query values. I.e. ?one[two][three][]=four&one[two][three][]=five

  • Fixed compatibility with Curb >= 0.7.16 This breaks compatibility with Curb < 0.7.16

  • Fix #to_rack to handle non-array response bodies.

    Thanks to Tammer Saleh

  • Added read_timeout accessor to StubSocket which fixes compatibility with aws-sdk

    Thanks to Lin Jen-Shin

  • Fix warning "instance variable @query_params not initialized"

    Thanks to Joe Van Dyk

  • Using bytesize of message instead of its length for content-length header in em-http-request adapter. This fixes a problem with messages getting truncated in Ruby >= 1.9

    Thanks to Mark Abramov

  • Fixed problem with body params being matched even if params were different.

    Thanks to Evgeniy Dolzhenko for reporting this issue.

1.7.10 January 03, 2012
  • Yanked 1.7.9 and rebuilt gem on 1.8.7 to deal with syck/psych incompatibilties in gemspec.
1.7.8 November 20, 2011
  • Fix each adapter so that it calls a stub.with block only once per request. Previously, the block would be called two or three times per request Myron Marston.
1.7.7 October 14, 2011
  • RuPy 2011 release
  • Passing response object to a block passed to HTTPClient#do_get_block. This fixes HTTPClient.get_content failures. issue 130

    Thanks to Chris McGrath

  • Cleaned up ruby warnings when running WebMock code with -w.

    Thanks to Stephen Celis

  • Curb adapter now correctly calls on_failure for 4xx response codes.

    Thanks to Eugene Pimenov

1.7.6 September 03, 2011
  • Support for the HTTPClient's request_filter feature

    Thanks to Roman Shterenzon

1.7.5 August 27, 2011
  • Added support for Patron 0.4.15. This change is not backward compatible so please upgrade Patron to version >= 0.4.15 if you want to use it with WebMock.

    Thanks to Andreas Garn??s

1.7.4 August 17, 2011
  • Added support for matching EM-HTTP-Request requests with body declared as a Hash

    Thanks to David Yeu

1.7.3 August 17, 2011
  • Added Get, Post, Delete, Put, Head, Option constants to replaced Net::HTTP to make it possible to marshal objects with these constants assigned to properties. This fixed problem with tvdb_party gem which serializes HTTParty responses.

    Thanks to Klaus Hartl for reporting this issue.

1.7.2 August 16, 2011
  • Redefined const_get and constants methods on the replaced Net::HTTP to return same values as original Net::HTTP
1.7.1 August 15, 2011
  • Redefined const_defined? on the replaced Net::HTTP so that it returns true if constant is defined on the original Net::HTTP. This fixes problems with "Net::HTTP::Get".constantize.

    Thanks to C??ssio Marques for reporting the issue and to Myron Marston for help with the solution.

1.7.0 August 15, 2011
  • Fixed Net::HTTP adapter to not break normal Net::HTTP behaviour when network connections are allowed. This fixes selenium-webdriver compatibility!!!

  • Added support for EM-HTTP-Request 1.0.x and EM-Synchrony. Thanks to Steve Hull

  • Added support for setting expectations to on a stub itself i.e.

      stub = stub_request(:get, "")
      # ... make requests ...
      stub.should have_been_requested

    Thanks to Aidan Feldman

  • Minitest support! Thanks to Peter Higgins

  • Added support for Typhoeus::Hydra

  • Added support for Curb::Easy#http_post and Curb::Easy#http_post with multiple arguments. Thanks to Salvador Fuentes Jr and Alex Rothenberg

  • Rack support. Requests can be stubbed to respond with a Rack app i.e.

      class MyRackApp
          [200, {}, ["Hello"]]
      stub_request(:get, "").to_rack(MyRackApp)
      RestClient.get("") # ===> "Hello"

    Thanks to Jay Adkisson

  • Added support for selective disabling and enabling of http lib adapters

      WebMock.disable!                         #disable WebMock (all adapters)
      WebMock.disable!(:except => [:net_http]) #disable WebMock for all libs except Net::HTTP
      WebMock.enable!                          #enable WebMock (all adapters)
      WebMock.enable!(:except => [:patron])    #enable WebMock for all libs except Patron
  • The error message on an unstubbed request shows a code snippet with body as a hash when it was in url encoded form.

      >'', "data[a]=1&data[b]=2", :content_type => 'application/x-www-form-urlencoded')
      WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled....
      You can stub this request with the following snippet:
      stub_request(:post, "").
        with(:body => {"data"=>{"a"=>"1", "b"=>"2"}},
             :headers => { 'Content-Type'=>'application/x-www-form-urlencoded' }).
        to_return(:status => 200, :body => "", :headers => {})

    Thanks to Alex Rothenberg

  • The error message on an unstubbed request shows currently registered request stubs.

      > stub_request(:get, "")
      > stub_request(:get, "")
      > RestClient.get("")
      WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled....
      You can stub this request with the following snippet:
      stub_request(:get, "").
        to_return(:status => 200, :body => "", :headers => {})
      registered request stubs:
      stub_request(:get, "")
      stub_request(:get, "")

    Thanks to Lin Jen-Shin for suggesting this feature.

  • Fixed problem with matching requests with json body, when json strings have date format. Thanks to Joakim Ekberg for reporting this issue.

  • WebMock now attempts to require each http library before monkey patching it. This is to avoid problem when http library is required after WebMock is required. Thanks to Myron Marston for suggesting this change.

  • External requests can be disabled while allowing selected ports on selected hosts

      WebMock.disable_net_connect!(:allow => "")
      RestClient.get("") # ===> Failure
      RestClient.get("")  # ===> Allowed.

    Thanks to Zach Dennis

  • Fixed syntax error in README examples, showing the ways of setting request expectations. Thanks to Nikita Fedyashev

Many thanks to WebMock co-maintainer James Conroy-Finn who did a great job maintaining WebMock on his own for the last couple of months.

1.6.4 May 17, 2011

This is a quick slip release to regenerate the gemspec. Apparently jeweler inserts dependencies twice if you use the gemspec method in your Gemfile and declare gem dependencies in your gemspec.


This just bit me. I just released a gem with the wrong dependencies because I have updated jeweler. This should have been opt-in, otherwise a bunch of people using jeweler are going to release gems with the wrong dependencies because you are automatically importing from the Gemfile.

1.6.2 January 12, 2011
  • Em-http-request adapter sets last_effective_url property. Thanks to Sam Stokes.

  • Curb adapter supports Curb::Easy#http_post and Curb::Easy#http_put without arguments (by setting post_body or put_data beforehand). Thanks to Eugene Bolshakov

1.6.1 November 13, 2010
  • Fixed issue with webmock/rspec which didn't load correctly if rspec/core was already required but rspec/expectations not.
1.6.0 November 12, 2010
  • Simplified integration with Test::Unit, RSpec and Cucumber. Now only a single file has to be required i.e.

              require 'webmock/test_unit'
              require 'webmock/rspec'
              require 'webmock/cucumber'
  • The error message on unstubbed request now contains code snippet which can be used to stub this request. Thanks to Martyn Loughran for suggesting this feature.

  • The expectation failure message now contains a list of made requests. Thanks to Martyn Loughran for suggesting this feature.

  • Added WebMock.print_executed_requests method which can be useful to find out what requests were made until a given point.

  • em-http-request adapter is now activated by replacing EventMachine::HttpRequest constant, instead of monkeypatching the original class.

This technique is borrowed from em-http-request native mocking module. It allows switching WebMock adapter on an off, and using it interchangeably with em-http-request native mocking i.e:


    Thanks to Martyn Loughran for suggesting this feature.
  • WebMock.reset_webmock is deprecated in favour of new WebMock.reset!

  • Fixed integration with Cucumber. Previously documented example didn't work with new versions of Cucumber.

  • Fixed stubbing requests with body declared as a hash. Thanks to Erik Michaels-Ober for reporting the issue.

  • Fixed issue with em-http-request adapter which didn't work when :query option value was passed as a string, not a hash. Thanks to Chee Yeo for reporting the issue.

  • Fixed problem with assert_requested which didn't work if used outside rspec or test/unit

  • Removed dependency on json gem

1.5.0 November 02, 2010
  • Support for dynamically evaluated raw responses recorded with curl -is

              `curl -is > /tmp/`
              stub_request(:get, "").to_return(lambda { |request|"/tmp/#{}.txt" }))
  • :net_http_connect_on_start option can be passed to WebMock.allow_net_connect! and WebMock.disable_net_connect! methods, i.e.

              WebMock.allow_net_connect!(:net_http_connect_on_start => true)

    This forces WebMock Net::HTTP adapter to always connect on Net::HTTP.start. Check 'Connecting on Net::HTTP.start' in README for more information.

    Thanks to Alastair Brunton for reporting the issue and for fix suggestions.

  • Fixed an issue where Patron spec tried to remove system temporary directory. Thanks to Hans de Graaff

  • WebMock specs now use RSpec 2

  • rake spec NO_CONNECTION=true can now be used to only run WebMock specs which do not make real network connections

1.4.0 October 12, 2010
  • Curb support!!! Thanks to the awesome work of Pete Higgins!

  • include WebMock is now deprecated to avoid method and constant name conflicts. Please include WebMock::API instead.

  • WebMock::API#request is renamed to WebMock::API#a_request to prevent method name conflicts with i.e. Rails controller specs. WebMock.request is still available.

  • Deprecated WebMock#request, WebMock#allow_net_connect!, WebMock#net_connect_allowed?, WebMock#registered_request?, WebMock#reset_callbacks, WebMock#after_request instance methods. These methods are still available, but only as WebMock class methods.

  • Removed WebMock.response_for_request and WebMock.assertion_failure which were only used internally and were not documented.

  • :allow_localhost => true' now permits in addition to and 'localhost'. Thanks to Myron Marston and Mike Gehard for suggesting this.

  • Fixed issue with both RSpec 1.x and 2.x being available.

    WebMock now tries to use already loaded version of RSpec (1.x or 2.x). Previously it was loading RSpec 2.0 if available, even if RSpec 1.3 was already loaded.

    Thanks to Hans de Graaff for reporting this.

  • Changed runtime dependency on Addressable version 2.2.2 which fixes handling of percent-escaped '+'

1.3.5 September 05, 2010
  • External requests can be disabled while allowing selected hosts. Thanks to Charles Li and Ryan Bigg

    This feature was available before only for localhost with :allow_localhost => true

      WebMock.disable_net_connect!(:allow => "")
      Net::HTTP.get('', '/')   # ===> Failure
      Net::HTTP.get('', '/')      # ===> Allowed.
  • Fixed Net::HTTP adapter so that it preserves the original behavior of Net::HTTP.

    When making a request with a block that calls #read_body on the request, Net::HTTP causes the body to be set to a Net::ReadAdapter, but WebMock was causing the body to be set to a string.

1.3.4 August 09, 2010
  • Fixed Net::HTTP adapter to handle cases where a block with read_body call is passed to request. This fixes compatibility with open-uri. Thanks to Mark Evans for reporting the issue.
1.3.3 August 02, 2010
  • Fixed handling of multiple values for the same response header for Net::HTTP. Thanks to Myron Marston for reporting the issue.
1.3.2 July 22, 2010
  • Fixed compatibility with EM-HTTP-Request >= 0.2.9. Thanks to Myron Marston for reporting the issue.
1.3.1 July 11, 2010
  • The less hacky way to get the stream behaviour working for em-http-request. Thanks to Martyn Loughran

  • Fixed issues where Net::HTTP was not accepting valid nil response body. Thanks to Muness Alrubaie

1.3.0 June 20, 2010
  • Added support for em-http-request

  • Matching query params using a hash

      stub_http_request(:get, "").with(:query => {"a" => ["b", "c"]})
      RestClient.get("[]=b&a[]=c") # ===> Success
      request(:get, "").with(:query => {"a" => ["b", "c"]}).should have_been_made  # ===> Success
  • Matching request body against a hash. Body can be URL-Encoded, JSON or XML.

    (Thanks to Steve Tooke for the idea and a solution for url-encoded bodies)

      stub_http_request(:post, "").
              with(:body => {:data => {:a => '1', :b => 'five'}})
 '', "data[a]=1&data[b]=five",
      :content_type => 'application/x-www-form-urlencoded')    # ===> Success
 '', '{"data":{"a":"1","b":"five"}}',
      :content_type => 'application/json')    # ===> Success
 '', '<data a="1" b="five" />',
              :content_type => 'application/xml' )    # ===> Success
      request(:post, "").
      with(:body => {:data => {:a => '1', :b => 'five'}},
      :headers => 'Content-Type' => 'application/json').should have_been_made         # ===> Success
  • Request callbacks (Thanks to Myron Marston for all suggestions)

    WebMock can now invoke callbacks for stubbed or real requests:

      WebMock.after_request do |request_signature, response|
        puts "Request #{request_signature} was made and #{response} was returned"

    invoke callbacks for real requests only and except requests made with Patron client

      WebMock.after_request(:except => [:patron], :real_requests_only => true)  do |request_signature, response|
          puts "Request #{request_signature} was made and #{response} was returned"
  • to_raise() now accepts an exception instance or a string as argument in addition to an exception class

      stub_request(:any, '').to_raise("some error"))
      stub_request(:any, '').to_raise("some error")
  • Matching requests based on a URI is 30% faster

  • Fixed constant namespace issues in HTTPClient adapter. Thanks to Nathaniel Bibler for submitting a patch.

1.2.2 May 25, 2010
  • Fixed problem where ArgumentError was raised if query params were made up of an array e.g. data[]=a&data[]=b. Thanks to Steve Tooke
1.2.1 May 23, 2010
  • Changed license from GPL to MIT

  • Fixed gemspec file. Thanks to Razic

1.2.0 May 13, 2010
  • RSpec 2 compatibility. Thanks to Sam Phillips!

  • :allow_localhost => true' now permits as well as 'localhost'. Thanks to Mack Earnhardt

  • Request URI matching in now 2x faster!

1.1.0 April 27, 2010
  • VCR compatibility. Many thanks to Myron Marston for all suggestions.

  • Support for stubbing requests and returning responses with multiple headers with the same name. i.e multiple Accept headers.

              stub_http_request(:get, '').
                with(:headers => {'Accept' => ['image/png', 'image/jpeg']}).
                to_return(:body => 'abc')
               {"Accept" => ['image/png', 'image/jpeg']}) # ===> "abc\n"
  • When real net connections are disabled and unstubbed request is made, WebMock throws WebMock::NetConnectNotAllowedError instead of assertion error or StandardError.

  • Added WebMock.version()

1.0.0 April 11, 2010
  • Added support for Patron

  • Responses dynamically evaluated from block (idea and implementation by Tom Ward)

              stub_request(:any, '').
                   to_return { |request| {:body => request.body} }
    '', 'abc')    # ===> "abc\n"
  • Responses dynamically evaluated from lambda (idea and implementation by Tom Ward)

      stub_request(:any, '').
            to_return(lambda { |request| {:body => request.body} })
'', 'abc')    # ===> "abc\n"
  • Response with custom status message

              stub_request(:any, "").to_return(:status => [500, "Internal Server Error"])
              req ="/")
              Net::HTTP.start("") { |http| http.request(req) }.message # ===> "Internal Server Error"
  • Raising timeout errors (suggested by Jeffrey Jones) (compatibility with Ruby 1.8.6 by Mack Earnhardt)

              stub_request(:any, '').to_timeout
    '', 'abc')    # ===> RestClient::RequestTimeout
  • External requests can be disabled while allowing localhost (idea and implementation by Mack Earnhardt)

              WebMock.disable_net_connect!(:allow_localhost => true)
              Net::HTTP.get('', '/')   # ===> Failure
              Net::HTTP.get('localhost:9887', '/')      # ===> Allowed. Perhaps to Selenium?

0.9.1 February 02, 2010
  • Fixed issue where response status code was not read from raw (curl -is) responses
0.9.0 January 31, 2010
  • Matching requests against provided block (by Sergio Gil)

              stub_request(:post, "").with { |request| request.body == "abc" }.to_return(:body => "def")
    '', 'abc')    # ===> "def\n"
              request(:post, "").with { |req| req.body == "abc" }.should have_been_made
              assert_requested(:post, "") { |req| req.body == "abc" }
  • Matching request body against regular expressions (suggested by Ben Pickles)

              stub_request(:post, "").with(:body => /^.*world$/).to_return(:body => "abc")
    '', 'hello world')    # ===> "abc\n"
  • Matching request headers against regular expressions (suggested by Ben Pickles)

              stub_request(:post, "").with(:headers => {"Content-Type" => /image\/.+/}).to_return(:body => "abc")
    '', '', {'Content-Type' => 'image/png'})    # ===> "abc\n"
  • Replaying raw responses recorded with curl -is

              `curl -is > /tmp/example_curl_-is_output.txt`
              raw_response_file ="/tmp/example_curl_-is_output.txt")
      from file
              stub_request(:get, "").to_return(raw_response_file)
      or string
              stub_request(:get, "").to_return(
  • Multiple responses for repeated requests

              stub_request(:get, "").to_return({:body => "abc"}, {:body => "def"})
              Net::HTTP.get('', '/')    # ===> "abc\n"
              Net::HTTP.get('', '/')    # ===> "def\n"
  • Multiple responses using chained to_return() or to_raise() declarations

              stub_request(:get, "").
                      to_return({:body => "abc"}).then.  #then() just is a syntactic sugar
                      to_return({:body => "def"}).then.
              Net::HTTP.get('', '/')    # ===> "abc\n"
              Net::HTTP.get('', '/')    # ===> "def\n"
              Net::HTTP.get('', '/')    # ===> MyException raised
  • Specifying number of times given response should be returned

              stub_request(:get, "").
                      to_return({:body => "abc"}).times(2).then.
                      to_return({:body => "def"})
              Net::HTTP.get('', '/')    # ===> "abc\n"
              Net::HTTP.get('', '/')    # ===> "abc\n"
              Net::HTTP.get('', '/')    # ===> "def\n"
  • Added support for Net::HTTP::Post#body_stream

      This fixes compatibility with new versions of RestClient
  • WebMock doesn't suppress default request headers added by http clients anymore.

      i.e. Net::HTTP adds `'Accept'=>'*/*'` to all requests by default
0.8.2 January 17, 2010
  • Fixed issue where WebMock was not closing IO object passed as response body after reading it.
  • Ruby 1.9.2 compat: Use File#expand_path for require path because "." is not be included in LOAD_PATH since Ruby 1.9.2
0.8.1 January 14, 2010
  • Fixed HTTPClient adapter compatibility with Ruby 1.8.6 (reported by Piotr Usewicz)
  • Net:HTTP adapter now handles request body assigned as Net::HTTP::Post#body attribute (fixed by Mack Earnhardt)
  • Fixed issue where requests were not matching stubs with Accept header set.(reported by Piotr Usewicz)
  • Fixed compatibility with Ruby 1.9.1, 1.9.2 and JRuby 1.3.1 (reported by Diego E. ???Flameeyes??? Petten??)
  • Fixed issue with response body declared as IO object and multiple requests (reported by Niels Meersschaert)
  • Fixed "undefined method `assertion_failure'" error (reported by Nick Plante)
0.8.0 December 11, 2009
  • Support for HTTPClient (sync and async requests)
  • Support for dynamic responses. Response body and headers can be now declared as lambda. (Thanks to Ivan Vega ( @ivanyv ) for suggesting this feature)
  • Support for stubbing and expecting requests with empty body
  • Executing non-stubbed request leads to failed expectation instead of error

0.7.3 November 24, 2009
  • Clarified documentation
  • Fixed some issues with loading of Webmock classes
  • Test::Unit and RSpec adapters have to be required separately
0.7.2 November 24, 2009
  • Added support for matching escaped and non escaped URLs
0.7.1 November 20, 2009  
0.7.0 November 20, 2009