vcr 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/CHANGELOG.md +12 -0
  2. data/FullBuildRakeFile +22 -0
  3. data/Gemfile +8 -0
  4. data/Gemfile.lock +46 -25
  5. data/Guardfile +9 -0
  6. data/README.md +10 -371
  7. data/Rakefile +6 -2
  8. data/TODO.md +4 -0
  9. data/features/support/env.rb +5 -1
  10. data/full_build +1 -0
  11. data/lib/vcr.rb +17 -7
  12. data/lib/vcr/basic_object.rb +39 -0
  13. data/lib/vcr/config.rb +4 -7
  14. data/lib/vcr/deprecations.rb +14 -0
  15. data/lib/vcr/http_stubbing_adapters/common.rb +44 -13
  16. data/lib/vcr/http_stubbing_adapters/fakeweb.rb +17 -28
  17. data/lib/vcr/http_stubbing_adapters/multi_object_proxy.rb +43 -0
  18. data/lib/vcr/http_stubbing_adapters/typhoeus.rb +101 -0
  19. data/lib/vcr/http_stubbing_adapters/webmock.rb +16 -37
  20. data/lib/vcr/internet_connection.rb +2 -1
  21. data/lib/vcr/structs.rb +32 -0
  22. data/lib/vcr/version.rb +1 -1
  23. data/spec/config_spec.rb +5 -25
  24. data/spec/deprecations_spec.rb +31 -3
  25. data/spec/extensions/net_http_spec.rb +1 -0
  26. data/spec/fixtures/1.9.1/fake_example.com_responses.yml +32 -1
  27. data/spec/fixtures/not_1.9.1/fake_example.com_responses.yml +32 -1
  28. data/spec/http_stubbing_adapters/fakeweb_spec.rb +9 -24
  29. data/spec/http_stubbing_adapters/multi_object_proxy_spec.rb +101 -0
  30. data/spec/http_stubbing_adapters/typhoeus_spec.rb +28 -0
  31. data/spec/http_stubbing_adapters/webmock_spec.rb +8 -26
  32. data/spec/internet_connection_spec.rb +25 -7
  33. data/spec/spec_helper.rb +3 -1
  34. data/spec/structs_spec.rb +30 -6
  35. data/spec/support/http_library_adapters.rb +50 -15
  36. data/spec/support/http_stubbing_adapter.rb +65 -56
  37. data/spec/support/version_checker.rb +29 -0
  38. data/spec/vcr_spec.rb +30 -12
  39. data/vcr.gemspec +5 -4
  40. metadata +44 -15
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe VCR::HttpStubbingAdapters::Typhoeus do
4
+ without_monkey_patches :vcr
5
+
6
+ before(:each) do
7
+ ::Typhoeus::Hydra.stubs = []
8
+ ::Typhoeus::Hydra.allow_net_connect = true
9
+ end
10
+
11
+ it_behaves_like 'an http stubbing adapter', ['typhoeus'], [:method, :uri, :host, :path, :body, :headers]
12
+
13
+ it_performs('version checking',
14
+ :valid => %w[ 0.2.0 0.2.99 ],
15
+ :too_low => %w[ 0.1.0 0.1.31 ],
16
+ :too_high => %w[ 0.3.0 1.0.0 ]
17
+ ) do
18
+ disable_warnings
19
+ before(:each) { @orig_version = Typhoeus::VERSION }
20
+ after(:each) { Typhoeus::VERSION = @orig_version }
21
+
22
+ # Cannot be regular method def as that raises a "dynamic constant assignment" error
23
+ define_method :stub_version do |version|
24
+ Typhoeus::VERSION = version
25
+ end
26
+ end
27
+ end unless RUBY_PLATFORM == 'java'
28
+
@@ -3,35 +3,17 @@ require 'spec_helper'
3
3
  describe VCR::HttpStubbingAdapters::WebMock do
4
4
  without_monkey_patches :vcr
5
5
 
6
- it_should_behave_like 'an http stubbing adapter',
6
+ it_behaves_like 'an http stubbing adapter',
7
7
  %w[net/http patron httpclient em-http-request curb],
8
8
  [:method, :uri, :host, :path, :body, :headers]
9
9
 
10
- describe '#check_version!' do
11
- before(:each) { WebMock.should respond_to(:version) }
12
-
13
- %w( 0.9.9 0.9.10 0.1.30 1.0.30 1.2.9 1.3.9 ).each do |version|
14
- it "raises an error when WebMock's version is #{version}" do
15
- WebMock.stub!(:version).and_return(version)
16
- described_class.should_not_receive(:warn)
17
- expect { described_class.check_version! }.to raise_error(/You are using WebMock #{version}. VCR requires version .* or greater/)
18
- end
19
- end
20
-
21
- %w( 1.4.0 1.4.10 1.4.99 ).each do |version|
22
- it "does nothing when WebMock's version is #{version}" do
23
- WebMock.stub!(:version).and_return(version)
24
- described_class.should_not_receive(:warn)
25
- expect { described_class.check_version! }.to_not raise_error
26
- end
27
- end
28
-
29
- %w( 1.5.0 1.10.0 2.0.0 ).each do |version|
30
- it "does nothing when WebMock's version is #{version}" do
31
- WebMock.stub!(:version).and_return(version)
32
- described_class.should_receive(:warn).with(/VCR is known to work with WebMock ~> .*\./)
33
- expect { described_class.check_version! }.to_not raise_error
34
- end
10
+ it_performs('version checking',
11
+ :valid => %w[ 1.4.0 1.4.99 1.5.0 1.5.99 ],
12
+ :too_low => %w[ 0.9.9 0.9.10 0.1.30 1.0.30 1.2.9 1.3.9 ],
13
+ :too_high => %w[ 1.6.0 1.10.0 2.0.0 ]
14
+ ) do
15
+ def stub_version(version)
16
+ WebMock.stub(:version).and_return(version)
35
17
  end
36
18
  end
37
19
  end
@@ -3,17 +3,35 @@ require 'spec_helper'
3
3
  describe VCR::InternetConnection do
4
4
  describe '.available?' do
5
5
  before(:each) do
6
- described_class.instance_variable_set(:@available, nil)
6
+ described_class.send(:remove_instance_variable, :@available) if described_class.instance_variable_defined?(:@available)
7
7
  end
8
8
 
9
- it 'returns true when pinging example.com succeeds' do
10
- Ping.stub(:pingecho).with("example.com", anything, anything).and_return(true)
11
- described_class.available?.should be_true
9
+ def stub_pingecho_with(value)
10
+ Ping.stub(:pingecho).with("example.com", anything, anything).and_return(value)
12
11
  end
13
12
 
14
- it 'returns false when pinging example.com fails' do
15
- Ping.stub(:pingecho).with("example.com", anything, anything).and_return(false)
16
- described_class.available?.should be_false
13
+ context 'when pinging example.com succeeds' do
14
+ it 'returns true' do
15
+ stub_pingecho_with(true)
16
+ described_class.should be_available
17
+ end
18
+
19
+ it 'memoizes the value so no extra pings are made' do
20
+ Ping.should_receive(:pingecho).once.and_return(true)
21
+ 3.times { described_class.available? }
22
+ end
23
+ end
24
+
25
+ context 'when pinging example.com fails' do
26
+ it 'returns false' do
27
+ stub_pingecho_with(false)
28
+ described_class.should_not be_available
29
+ end
30
+
31
+ it 'memoizes the value so no extra pings are made' do
32
+ Ping.should_receive(:pingecho).once.and_return(false)
33
+ 3.times { described_class.available? }
34
+ end
17
35
  end
18
36
  end
19
37
  end
data/spec/spec_helper.rb CHANGED
@@ -25,7 +25,7 @@ RSpec.configure do |config|
25
25
 
26
26
  config.before(:each) do
27
27
  VCR::Config.default_cassette_options = { :record => :new_episodes }
28
- VCR::Config.http_stubbing_library = :fakeweb
28
+ VCR::Config.stub_with :fakeweb
29
29
 
30
30
  WebMock.allow_net_connect!
31
31
  WebMock.reset_webmock
@@ -36,5 +36,7 @@ RSpec.configure do |config|
36
36
 
37
37
  config.filter_run :focus => true
38
38
  config.run_all_when_everything_filtered = true
39
+
40
+ config.alias_it_should_behave_like_to :it_performs, 'it performs'
39
41
  end
40
42
 
data/spec/structs_spec.rb CHANGED
@@ -32,6 +32,28 @@ describe VCR::Request do
32
32
  end
33
33
  end
34
34
 
35
+ describe 'uri normalization' do
36
+ def request(uri)
37
+ VCR::Request.new(:get, uri, '', {})
38
+ end
39
+
40
+ it 'adds port 80 to an http URI that lacks a port' do
41
+ request('http://example.com/foo').uri.should == 'http://example.com:80/foo'
42
+ end
43
+
44
+ it 'keeps the existing port for an http URI' do
45
+ request('http://example.com:8000/foo').uri.should == 'http://example.com:8000/foo'
46
+ end
47
+
48
+ it 'adds port 443 to an https URI that lacks a port' do
49
+ request('https://example.com/foo').uri.should == 'https://example.com:443/foo'
50
+ end
51
+
52
+ it 'keeps the existing port for an https URI' do
53
+ request('https://example.com:8000/foo').uri.should == 'https://example.com:8000/foo'
54
+ end
55
+ end
56
+
35
57
  describe '.from_net_http_request' do
36
58
  let(:net_http) { YAML.load(File.read(File.dirname(__FILE__) + "/fixtures/#{YAML_SERIALIZATION_VERSION}/example_net_http.yml")) }
37
59
  let(:request) { YAML.load(File.read(File.dirname(__FILE__) + "/fixtures/#{YAML_SERIALIZATION_VERSION}/example_net_http_request.yml")) }
@@ -53,10 +75,11 @@ describe VCR::Request do
53
75
  end
54
76
  end
55
77
 
56
- def with_headers(headers)
57
- described_class.new(:get, 'http://example.com/', nil, headers)
78
+ it_behaves_like 'a header normalizer' do
79
+ def with_headers(headers)
80
+ described_class.new(:get, 'http://example.com/', nil, headers)
81
+ end
58
82
  end
59
- it_should_behave_like 'a header normalizer'
60
83
  end
61
84
 
62
85
  describe VCR::ResponseStatus do
@@ -96,10 +119,11 @@ describe VCR::Response do
96
119
  end
97
120
  end
98
121
 
99
- def with_headers(headers)
100
- described_class.new(:status, headers, nil, '1.1')
122
+ it_behaves_like 'a header normalizer' do
123
+ def with_headers(headers)
124
+ described_class.new(:status, headers, nil, '1.1')
125
+ end
101
126
  end
102
- it_should_behave_like 'a header normalizer'
103
127
 
104
128
  it "ensures the body is serialized to yaml as a raw string" do
105
129
  body = "My String"
@@ -96,10 +96,26 @@ HTTP_LIBRARY_ADAPTERS['curb'] = Module.new do
96
96
  end
97
97
  end
98
98
 
99
+ HTTP_LIBRARY_ADAPTERS['typhoeus'] = Module.new do
100
+ def self.http_library_name; "Typhoeus"; end
101
+
102
+ def get_body_string(response)
103
+ response.body
104
+ end
105
+
106
+ def get_header(header_key, response)
107
+ response.headers_hash[header_key]
108
+ end
109
+
110
+ def make_http_request(method, url, body = nil, headers = {})
111
+ Typhoeus::Request.send(method, url, :body => body, :headers => headers)
112
+ end
113
+ end
114
+
99
115
  NET_CONNECT_NOT_ALLOWED_ERROR = /You can use VCR to automatically record this request and replay it later/
100
116
 
101
117
  module HttpLibrarySpecs
102
- def test_http_library(library, supported_request_match_attributes)
118
+ def test_http_library(library, supported_request_match_attributes, *other)
103
119
  # curb, patron and em-http-client cannot be installed on jruby
104
120
  return if %w[curb patron em-http-request].include?(library) && RUBY_INTERPRETER != :mri
105
121
 
@@ -135,7 +151,7 @@ module HttpLibrarySpecs
135
151
  end
136
152
  end
137
153
 
138
- it 'raises an error for another method' do
154
+ it "raises an error for a request with a different #{attribute}" do
139
155
  expect { make_http_request(invalid) }.to raise_error(NET_CONNECT_NOT_ALLOWED_ERROR)
140
156
  end
141
157
  else
@@ -192,11 +208,12 @@ module HttpLibrarySpecs
192
208
 
193
209
  it 'records new http requests' do
194
210
  VCR.should_receive(:record_http_interaction) do |interaction|
195
- URI.parse(interaction.request.uri).to_s.should == URI.parse('http://example.com/foo').to_s
211
+ interaction.request.uri.should == 'http://example.com:80/foo'
196
212
  interaction.request.method.should == :get
197
213
  interaction.response.status.code.should == 404
198
214
  interaction.response.status.message.should == 'Not Found'
199
215
  interaction.response.body.should =~ /The requested URL \/foo was not found/
216
+ interaction.response.headers['content-type'].should == ["text/html; charset=iso-8859-1"]
200
217
  end
201
218
 
202
219
  make_http_request(:get, 'http://example.com/foo')
@@ -214,6 +231,11 @@ module HttpLibrarySpecs
214
231
  subject.request_stubbed?(VCR::Request.new(method, url), [:method, :uri]).should == expected
215
232
  end
216
233
 
234
+ it "returns false from #http_connections_allowed? when http_connections_allowed is set to nil" do
235
+ subject.http_connections_allowed = nil
236
+ subject.http_connections_allowed?.should == false
237
+ end
238
+
217
239
  [true, false].each do |http_allowed|
218
240
  context "when #http_connections_allowed is set to #{http_allowed}" do
219
241
  before(:each) { subject.http_connections_allowed = http_allowed }
@@ -257,14 +279,16 @@ module HttpLibrarySpecs
257
279
  subject.stub_requests(@recorded_interactions, VCR::RequestMatcher::DEFAULT_MATCH_ATTRIBUTES)
258
280
  end
259
281
 
260
- it 'returns true from #request_stubbed? for the requests that are stubbed' do
261
- test_request_stubbed(:post, 'http://example.com', true)
262
- test_request_stubbed(:get, 'http://example.com/foo', true)
263
- end
282
+ if other.include?(:needs_net_http_extension)
283
+ it 'returns true from #request_stubbed? for the requests that are stubbed' do
284
+ test_request_stubbed(:post, 'http://example.com', true)
285
+ test_request_stubbed(:get, 'http://example.com/foo', true)
286
+ end
264
287
 
265
- it 'returns false from #request_stubbed? for requests that are not stubbed' do
266
- test_request_stubbed(:post, 'http://example.com/foo', false)
267
- test_request_stubbed(:get, 'http://google.com', false)
288
+ it 'returns false from #request_stubbed? for requests that are not stubbed' do
289
+ test_request_stubbed(:post, 'http://example.com/foo', false)
290
+ test_request_stubbed(:get, 'http://google.com', false)
291
+ end
268
292
  end
269
293
 
270
294
  it 'gets the stubbed responses when multiple post requests are made to http://example.com, and does not record them' do
@@ -275,7 +299,16 @@ module HttpLibrarySpecs
275
299
 
276
300
  it 'gets the stubbed responses when requests are made to http://example.com/foo, and does not record them' do
277
301
  VCR.should_receive(:record_http_interaction).never
278
- get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response with path=foo'
302
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 1 with path=foo'
303
+ end
304
+
305
+ it 'rotates through multiple responses for the same request' do
306
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 1 with path=foo'
307
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 2 with path=foo'
308
+
309
+ # subsequent requests keep getting the last one
310
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 2 with path=foo'
311
+ get_body_string(make_http_request(:get, 'http://example.com/foo')).should == 'example.com get response 2 with path=foo'
279
312
  end
280
313
 
281
314
  it "correctly handles stubbing multiple values for the same header" do
@@ -287,10 +320,12 @@ module HttpLibrarySpecs
287
320
 
288
321
  test_real_http_request(http_allowed)
289
322
 
290
- it 'returns false from #request_stubbed?' do
291
- test_request_stubbed(:get, 'http://example.com/foo', false)
292
- test_request_stubbed(:post, 'http://example.com', false)
293
- test_request_stubbed(:get, 'http://google.com', false)
323
+ if other.include?(:needs_net_http_extension)
324
+ it 'returns false from #request_stubbed?' do
325
+ test_request_stubbed(:get, 'http://example.com/foo', false)
326
+ test_request_stubbed(:post, 'http://example.com', false)
327
+ test_request_stubbed(:get, 'http://google.com', false)
328
+ end
294
329
  end
295
330
  end
296
331
  end
@@ -1,20 +1,22 @@
1
- shared_examples_for "an http stubbing adapter" do |supported_http_libraries, supported_request_match_attributes|
1
+ shared_examples_for "an http stubbing adapter" do |supported_http_libraries, supported_request_match_attributes, *other|
2
2
  extend HttpLibrarySpecs
3
3
  before(:each) { VCR.stub!(:http_stubbing_adapter).and_return(subject) }
4
4
  subject { described_class }
5
5
 
6
- describe '#request_uri' do
7
- it 'returns the uri for the given http request' do
8
- net_http = Net::HTTP.new('example.com', 80)
9
- request = Net::HTTP::Get.new('/foo/bar')
10
- subject.request_uri(net_http, request).should == 'http://example.com:80/foo/bar'
11
- end
6
+ if other.include?(:needs_net_http_extension)
7
+ describe '#request_uri' do
8
+ it 'returns the uri for the given http request' do
9
+ net_http = Net::HTTP.new('example.com', 80)
10
+ request = Net::HTTP::Get.new('/foo/bar')
11
+ subject.request_uri(net_http, request).should == 'http://example.com:80/foo/bar'
12
+ end
12
13
 
13
- it 'handles basic auth' do
14
- net_http = Net::HTTP.new('example.com',80)
15
- request = Net::HTTP::Get.new('/auth.txt')
16
- request.basic_auth 'user', 'pass'
17
- subject.request_uri(net_http, request).should == 'http://user:pass@example.com:80/auth.txt'
14
+ it 'handles basic auth' do
15
+ net_http = Net::HTTP.new('example.com',80)
16
+ request = Net::HTTP::Get.new('/auth.txt')
17
+ request.basic_auth 'user', 'pass'
18
+ subject.request_uri(net_http, request).should == 'http://user:pass@example.com:80/auth.txt'
19
+ end
18
20
  end
19
21
  end
20
22
 
@@ -25,76 +27,83 @@ shared_examples_for "an http stubbing adapter" do |supported_http_libraries, sup
25
27
  subject.ignore_localhost?.should == val
26
28
  end
27
29
  end
30
+
31
+ it "returns false when ignore_localhost is set to nil" do
32
+ subject.ignore_localhost = nil
33
+ subject.ignore_localhost?.should == false
34
+ end
28
35
  end
29
36
 
30
- describe '#request_stubbed? using specific match_attributes' do
31
- let(:interactions) { YAML.load(File.read(File.join(File.dirname(__FILE__), '..', 'fixtures', YAML_SERIALIZATION_VERSION, 'match_requests_on.yml'))) }
37
+ if other.include?(:needs_net_http_extension)
38
+ describe '#request_stubbed? using specific match_attributes' do
39
+ let(:interactions) { YAML.load(File.read(File.join(File.dirname(__FILE__), '..', 'fixtures', YAML_SERIALIZATION_VERSION, 'match_requests_on.yml'))) }
32
40
 
33
- @supported_request_match_attributes = supported_request_match_attributes
34
- def self.matching_on(attribute, valid1, valid2, invalid, &block)
35
- supported_request_match_attributes = @supported_request_match_attributes
41
+ @supported_request_match_attributes = supported_request_match_attributes
42
+ def self.matching_on(attribute, valid1, valid2, invalid, &block)
43
+ supported_request_match_attributes = @supported_request_match_attributes
36
44
 
37
- describe ":#{attribute}" do
38
- if supported_request_match_attributes.include?(attribute)
39
- before(:each) { subject.stub_requests(interactions, [attribute]) }
40
- module_eval(&block)
45
+ describe ":#{attribute}" do
46
+ if supported_request_match_attributes.include?(attribute)
47
+ before(:each) { subject.stub_requests(interactions, [attribute]) }
48
+ module_eval(&block)
41
49
 
42
- [valid1, valid2].each do |val|
43
- it "returns true for a #{val.inspect} request" do
44
- subject.request_stubbed?(request(val), [attribute]).should be_true
50
+ [valid1, valid2].each do |val|
51
+ it "returns true for a #{val.inspect} request" do
52
+ subject.request_stubbed?(request(val), [attribute]).should == true
53
+ end
45
54
  end
46
- end
47
55
 
48
- it "returns false for another #{attribute}" do
49
- subject.request_stubbed?(request(invalid), [attribute]).should be_false
50
- end
51
- else
52
- it 'raises an error indicating matching requests on this attribute is not supported' do
53
- expect { subject.request_stubbed?(VCR::Request.new, [attribute]) }.to raise_error(/does not support matching requests on #{attribute}/)
56
+ it "returns false for another #{attribute}" do
57
+ subject.request_stubbed?(request(invalid), [attribute]).should == false
58
+ end
59
+ else
60
+ it 'raises an error indicating matching requests on this attribute is not supported' do
61
+ expect { subject.request_stubbed?(VCR::Request.new, [attribute]) }.to raise_error(/does not support matching requests on #{attribute}/)
62
+ end
54
63
  end
55
64
  end
56
65
  end
57
- end
58
66
 
59
- matching_on :method, :get, :post, :put do
60
- def request(http_method)
61
- VCR::Request.new(http_method, 'http://some-wrong-domain.com/', nil, {})
67
+ matching_on :method, :get, :post, :put do
68
+ def request(http_method)
69
+ VCR::Request.new(http_method, 'http://some-wrong-domain.com/', nil, {})
70
+ end
62
71
  end
63
- end
64
72
 
65
- matching_on :host, 'example1.com', 'example2.com', 'example3.com' do
66
- def request(host)
67
- VCR::Request.new(:get, "http://#{host}/some/wrong/path", nil, {})
73
+ matching_on :host, 'example1.com', 'example2.com', 'example3.com' do
74
+ def request(host)
75
+ VCR::Request.new(:get, "http://#{host}/some/wrong/path", nil, {})
76
+ end
68
77
  end
69
- end
70
78
 
71
- matching_on :uri, 'http://example.com/uri1', 'http://example.com/uri2', 'http://example.com/uri3' do
72
- def request(uri)
73
- VCR::Request.new(:get, uri, nil, {})
79
+ matching_on :uri, 'http://example.com/uri1', 'http://example.com/uri2', 'http://example.com/uri3' do
80
+ def request(uri)
81
+ VCR::Request.new(:get, uri, nil, {})
82
+ end
74
83
  end
75
- end
76
84
 
77
- matching_on :path, '/path1', '/path2', '/path3' do
78
- def request(path)
79
- VCR::Request.new(:get, "http://example.com#{path}", nil, {})
85
+ matching_on :path, '/path1', '/path2', '/path3' do
86
+ def request(path)
87
+ VCR::Request.new(:get, "http://example.com#{path}", nil, {})
88
+ end
80
89
  end
81
- end
82
90
 
83
- matching_on :body, 'param=val1', 'param=val2', 'param=val3' do
84
- def request(body)
85
- VCR::Request.new(:put, "http://wrong-domain.com/wrong/path", body, {})
91
+ matching_on :body, 'param=val1', 'param=val2', 'param=val3' do
92
+ def request(body)
93
+ VCR::Request.new(:put, "http://wrong-domain.com/wrong/path", body, {})
94
+ end
86
95
  end
87
- end
88
96
 
89
- matching_on :headers, { 'X-HTTP-HEADER1' => 'val1' }, { 'X-HTTP-HEADER1' => 'val2' }, { 'X-HTTP-HEADER1' => 'val3' } do
90
- def request(headers)
91
- VCR::Request.new(:get, "http://wrong-domain.com/wrong/path", nil, headers)
97
+ matching_on :headers, { 'X-HTTP-HEADER1' => 'val1' }, { 'X-HTTP-HEADER1' => 'val2' }, { 'X-HTTP-HEADER1' => 'val3' } do
98
+ def request(headers)
99
+ VCR::Request.new(:get, "http://wrong-domain.com/wrong/path", nil, headers)
100
+ end
92
101
  end
93
102
  end
94
103
  end
95
104
 
96
105
  supported_http_libraries.each do |library|
97
- test_http_library library, supported_request_match_attributes
106
+ test_http_library library, supported_request_match_attributes, *other
98
107
  end
99
108
  end
100
109