Skip to content

Instantly share code, notes, and snippets.

@chrisroos
Last active August 29, 2015 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisroos/8a48b7d15454f1c5aa7f to your computer and use it in GitHub Desktop.
Save chrisroos/8a48b7d15454f1c5aa7f to your computer and use it in GitHub Desktop.
Investigating WebMock and Net::HTTP.start

Smart Answers uses gds-api-adapters, which uses rest-client.

The rest-client Gem uses Net::HTTP and calls it using net = Net::HTTP.new and then net.start. We believe this might be causing problems when used with WebMock.

I've created the webmock_test.rb file to see if I can work out what's going on.

source 'https://rubygems.org'
gem 'webmock', '1.20.4', require: false
gem 'test-unit', require: false
GEM
remote: https://rubygems.org/
specs:
addressable (2.3.8)
crack (0.4.2)
safe_yaml (~> 1.0.0)
power_assert (0.2.4)
safe_yaml (1.0.4)
test-unit (3.1.2)
power_assert
webmock (1.20.4)
addressable (>= 2.3.6)
crack (>= 0.3.2)
PLATFORMS
ruby
DEPENDENCIES
test-unit
webmock (= 1.20.4)
BUNDLED WITH
1.10.4
require 'bundler/setup'
require 'test-unit'
require 'webmock'
WebMock.disable_net_connect!(:net_http_connect_on_start => true)
class HttpWrapper
def self.instance_start
request = Net::HTTP::Get.new('/instance_start')
net = Net::HTTP.new('www.example.com', 80)
net.start do |http|
http.request(request)
end
end
def self.class_start
request = Net::HTTP::Get.new('/class_start')
Net::HTTP.start('www.example.com', 80) do |http|
http.request(request)
end
end
end
class WebMockTest < Test::Unit::TestCase
include WebMock::API
def test_instance_start
stub_request(:get, "http://www.example.com/instance_start").
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
to_return(:status => 404, :body => "", :headers => {})
response = HttpWrapper.instance_start
assert_equal '404', response.code
end
def test_class_start
stub_request(:get, "http://www.example.com/class_start").
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
to_return(:status => 404, :body => "", :headers => {})
response = HttpWrapper.class_start
assert_equal '404', response.code
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment