webmock 1.6.4 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.gitignore +3 -1
- data/.travis.yml +6 -0
- data/CHANGELOG.md +211 -118
- data/Gemfile +16 -1
- data/Guardfile +24 -0
- data/LICENSE +1 -1
- data/README.md +64 -15
- data/Rakefile +19 -6
- data/lib/webmock.rb +9 -4
- data/lib/webmock/api.rb +5 -4
- data/lib/webmock/assertion_failure.rb +1 -1
- data/lib/webmock/callback_registry.rb +1 -1
- data/lib/webmock/config.rb +2 -2
- data/lib/webmock/cucumber.rb +1 -1
- data/lib/webmock/errors.rb +17 -5
- data/lib/webmock/http_lib_adapters/{curb.rb → curb_adapter.rb} +79 -49
- data/lib/webmock/http_lib_adapters/{em_http_request.rb → em_http_request/em_http_request_0_x.rb} +20 -15
- data/lib/webmock/http_lib_adapters/em_http_request/em_http_request_1_x.rb +201 -0
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +11 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +7 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +19 -0
- data/lib/webmock/http_lib_adapters/{httpclient.rb → httpclient_adapter.rb} +35 -8
- data/lib/webmock/http_lib_adapters/net_http.rb +84 -25
- data/lib/webmock/http_lib_adapters/net_http_response.rb +17 -17
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +124 -0
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +166 -0
- data/lib/webmock/minitest.rb +15 -0
- data/lib/webmock/rack_response.rb +52 -0
- data/lib/webmock/request_pattern.rb +4 -2
- data/lib/webmock/request_signature.rb +4 -0
- data/lib/webmock/request_stub.rb +35 -2
- data/lib/webmock/responses_sequence.rb +2 -2
- data/lib/webmock/rspec.rb +2 -2
- data/lib/webmock/rspec/matchers.rb +9 -4
- data/lib/webmock/rspec/matchers/webmock_matcher.rb +1 -1
- data/lib/webmock/stub_registry.rb +1 -1
- data/lib/webmock/stub_request_snippet.rb +14 -11
- data/lib/webmock/util/hash_keys_stringifier.rb +4 -4
- data/lib/webmock/util/headers.rb +3 -3
- data/lib/webmock/util/json.rb +54 -0
- data/lib/webmock/util/uri.rb +1 -1
- data/lib/webmock/version.rb +1 -1
- data/lib/webmock/webmock.rb +20 -3
- data/minitest/test_helper.rb +29 -0
- data/minitest/test_webmock.rb +6 -0
- data/minitest/webmock_spec.rb +30 -0
- data/spec/curb_spec.rb +26 -8
- data/spec/curb_spec_helper.rb +6 -6
- data/spec/em_http_request_spec.rb +95 -1
- data/spec/em_http_request_spec_helper.rb +16 -16
- data/spec/errors_spec.rb +19 -4
- data/spec/example_curl_output.txt +22 -22
- data/spec/http_lib_adapters/http_lib_adapter_registry_spec.rb +17 -0
- data/spec/http_lib_adapters/http_lib_adapter_spec.rb +12 -0
- data/spec/httpclient_spec.rb +1 -1
- data/spec/httpclient_spec_helper.rb +3 -38
- data/spec/my_rack_app.rb +18 -0
- data/spec/net_http_shared.rb +125 -0
- data/spec/net_http_spec.rb +27 -31
- data/spec/net_http_spec_helper.rb +4 -34
- data/spec/network_connection.rb +1 -1
- data/spec/patron_spec_helper.rb +4 -7
- data/spec/quality_spec.rb +60 -0
- data/spec/rack_response_spec.rb +33 -0
- data/spec/real_net_http_spec.rb +20 -0
- data/spec/request_execution_verifier_spec.rb +8 -8
- data/spec/request_pattern_spec.rb +3 -3
- data/spec/request_stub_spec.rb +19 -19
- data/spec/response_spec.rb +8 -8
- data/spec/spec_helper.rb +14 -11
- data/spec/stub_request_snippet_spec.rb +85 -37
- data/spec/support/webmock_server.rb +62 -0
- data/spec/typhoeus_hydra_spec.rb +53 -0
- data/spec/typhoeus_hydra_spec_helper.rb +50 -0
- data/spec/util/headers_spec.rb +5 -5
- data/spec/util/json_spec.rb +7 -0
- data/spec/util/uri_spec.rb +1 -1
- data/spec/vendor/addressable/lib/uri.rb +1 -0
- data/spec/vendor/crack/lib/crack.rb +1 -0
- data/spec/vendor/right_http_connection-1.2.4/History.txt +4 -4
- data/spec/vendor/right_http_connection-1.2.4/README.txt +4 -4
- data/spec/vendor/right_http_connection-1.2.4/Rakefile +3 -3
- data/spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb +4 -4
- data/spec/vendor/right_http_connection-1.2.4/setup.rb +4 -4
- data/spec/webmock_shared.rb +375 -143
- data/spec/webmock_spec.rb +7 -0
- data/test/http_request.rb +24 -0
- data/test/shared_test.rb +47 -0
- data/test/test_helper.rb +6 -3
- data/test/test_webmock.rb +2 -67
- data/webmock.gemspec +8 -7
- metadata +153 -88
- data/lib/webmock/http_lib_adapters/patron.rb +0 -100
- data/spec/other_net_http_libs_spec.rb +0 -30
data/.gemtest
ADDED
File without changes
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,98 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.7.0
|
4
|
+
|
5
|
+
* Fixed Net::HTTP adapter to not break normal Net::HTTP behaviour when network connections are allowed. This fixes **selenium-webdriver compatibility**!!!
|
6
|
+
|
7
|
+
* Added support for EM-HTTP-Request 1.0.x and EM-Synchrony. Thanks to [Steve Hull](https://github.com/sdhull)
|
8
|
+
|
9
|
+
* Added support for setting expectations to on a stub itself i.e.
|
10
|
+
|
11
|
+
stub = stub_request(:get, "www.example.com")
|
12
|
+
# ... make requests ...
|
13
|
+
stub.should have_been_requested
|
14
|
+
|
15
|
+
Thanks to [Aidan Feldman](https://github.com/afeld)
|
16
|
+
|
17
|
+
* Minitest support! Thanks to [Peter Higgins](https://github.com/phiggins)
|
18
|
+
|
19
|
+
* Added support for Typhoeus::Hydra
|
20
|
+
|
21
|
+
* Added support for `Curb::Easy#http_post` and `Curb::Easy#http_post` with multiple arguments. Thanks to [Salvador Fuentes Jr](https://github.com/fuentesjr) and [Alex Rothenberg](https://github.com/alexrothenberg)
|
22
|
+
|
23
|
+
* Rack support. Requests can be stubbed to respond with a Rack app i.e.
|
24
|
+
|
25
|
+
class MyRackApp
|
26
|
+
def self.call(env)
|
27
|
+
[200, {}, ["Hello"]]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
stub_request(:get, "www.example.com").to_rack(MyRackApp)
|
32
|
+
|
33
|
+
RestClient.get("www.example.com") # ===> "Hello"
|
34
|
+
|
35
|
+
|
36
|
+
Thanks to [Jay Adkisson](https://github.com/jayferd)
|
37
|
+
|
38
|
+
* Added support for selective disabling and enabling of http lib adapters
|
39
|
+
|
40
|
+
WebMock.disable! #disable WebMock (all adapters)
|
41
|
+
WebMock.disable!(:except => [:net_http]) #disable WebMock for all libs except Net::HTTP
|
42
|
+
WebMock.enable! #enable WebMock (all adapters)
|
43
|
+
WebMock.enable!(:except => [:patron]) #enable WebMock for all libs except Patron
|
44
|
+
|
45
|
+
* The error message on an unstubbed request shows a code snippet with body as a hash when it was in url encoded form.
|
46
|
+
|
47
|
+
> RestClient.post('www.example.com', "data[a]=1&data[b]=2", :content_type => 'application/x-www-form-urlencoded')
|
48
|
+
|
49
|
+
WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled....
|
50
|
+
|
51
|
+
You can stub this request with the following snippet:
|
52
|
+
|
53
|
+
stub_request(:post, "http://www.example.com/").
|
54
|
+
with(:body => {"data"=>{"a"=>"1", "b"=>"2"}},
|
55
|
+
:headers => { 'Content-Type'=>'application/x-www-form-urlencoded' }).
|
56
|
+
to_return(:status => 200, :body => "", :headers => {})
|
57
|
+
|
58
|
+
Thanks to [Alex Rothenberg](https://github.com/alexrothenberg)
|
59
|
+
|
60
|
+
* The error message on an unstubbed request shows currently registered request stubs.
|
61
|
+
|
62
|
+
> stub_request(:get, "www.example.net")
|
63
|
+
> stub_request(:get, "www.example.org")
|
64
|
+
> RestClient.get("www.example.com")
|
65
|
+
WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled....
|
66
|
+
|
67
|
+
You can stub this request with the following snippet:
|
68
|
+
|
69
|
+
stub_request(:get, "http://www.example.com/").
|
70
|
+
to_return(:status => 200, :body => "", :headers => {})
|
71
|
+
|
72
|
+
registered request stubs:
|
73
|
+
|
74
|
+
stub_request(:get, "http://www.example.net/")
|
75
|
+
stub_request(:get, "http://www.example.org/")
|
76
|
+
|
77
|
+
Thanks to [Lin Jen-Shin](https://github.com/godfat) for suggesting this feature.
|
78
|
+
|
79
|
+
* Fixed problem with matching requests with json body, when json strings have date format. Thanks to [Joakim Ekberg](https://github.com/kalasjocke) for reporting this issue.
|
80
|
+
|
81
|
+
* 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](https://github.com/myronmarston) for suggesting this change.
|
82
|
+
|
83
|
+
* External requests can be disabled while allowing selected ports on selected hosts
|
84
|
+
|
85
|
+
WebMock.disable_net_connect!(:allow => "www.example.com:8080")
|
86
|
+
RestClient.get("www.example.com:80") # ===> Failure
|
87
|
+
RestClient.get("www.example.com:8080") # ===> Allowed.
|
88
|
+
|
89
|
+
Thanks to [Zach Dennis](https://github.com/zdennis)
|
90
|
+
|
91
|
+
* Fixed syntax error in README examples, showing the ways of setting request expectations. Thanks to [Nikita Fedyashev](https://github.com/nfedyashev)
|
92
|
+
|
93
|
+
|
94
|
+
**Many thanks to WebMock co-maintainer [James Conroy-Finn](https://github.com/jcf) who did a great job maintaining WebMock on his own for the last couple of months.**
|
95
|
+
|
3
96
|
## 1.6.4
|
4
97
|
|
5
98
|
This is a quick slip release to regenerate the gemspec. Apparently
|
@@ -52,9 +145,9 @@ josevalim:
|
|
52
145
|
|
53
146
|
* Simplified integration with Test::Unit, RSpec and Cucumber. Now only a single file has to be required i.e.
|
54
147
|
|
55
|
-
|
56
|
-
|
57
|
-
|
148
|
+
require 'webmock/test_unit'
|
149
|
+
require 'webmock/rspec'
|
150
|
+
require 'webmock/cucumber'
|
58
151
|
|
59
152
|
* 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.
|
60
153
|
|
@@ -66,12 +159,12 @@ josevalim:
|
|
66
159
|
|
67
160
|
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:
|
68
161
|
|
69
|
-
|
70
|
-
|
162
|
+
EventMachine::WebMockHttpRequest.activate!
|
163
|
+
EventMachine::WebMockHttpRequest.deactivate!
|
164
|
+
|
165
|
+
Thanks to Martyn Loughran for suggesting this feature.
|
71
166
|
|
72
|
-
|
73
|
-
|
74
|
-
* `WebMock.reset_webmock` is deprecated in favour of new `WebMock.reset!`
|
167
|
+
* `WebMock.reset_webmock` is deprecated in favour of new `WebMock.reset!`
|
75
168
|
|
76
169
|
* Fixed integration with Cucumber. Previously documented example didn't work with new versions of Cucumber.
|
77
170
|
|
@@ -88,12 +181,12 @@ josevalim:
|
|
88
181
|
* Support for dynamically evaluated raw responses recorded with `curl -is` <br/>
|
89
182
|
i.e.
|
90
183
|
|
91
|
-
|
92
|
-
|
184
|
+
`curl -is www.example.com > /tmp/www.example.com.txt`
|
185
|
+
stub_request(:get, "www.example.com").to_return(lambda { |request| File.new("/tmp/#{request.uri.host.to_s}.txt" }))
|
93
186
|
|
94
187
|
* `:net_http_connect_on_start` option can be passed to `WebMock.allow_net_connect!` and `WebMock.disable_net_connect!` methods, i.e.
|
95
188
|
|
96
|
-
|
189
|
+
WebMock.allow_net_connect!(:net_http_connect_on_start => true)
|
97
190
|
|
98
191
|
This forces WebMock Net::HTTP adapter to always connect on `Net::HTTP.start`. Check 'Connecting on Net::HTTP.start' in README for more information.
|
99
192
|
|
@@ -112,7 +205,7 @@ josevalim:
|
|
112
205
|
|
113
206
|
* `include WebMock` is now deprecated to avoid method and constant name conflicts. Please `include WebMock::API` instead.
|
114
207
|
|
115
|
-
* `WebMock::API#request` is renamed to `WebMock::API#a_request` to prevent method name conflicts with i.e. Rails controller specs.
|
208
|
+
* `WebMock::API#request` is renamed to `WebMock::API#a_request` to prevent method name conflicts with i.e. Rails controller specs.
|
116
209
|
WebMock.request is still available.
|
117
210
|
|
118
211
|
* 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.
|
@@ -135,11 +228,11 @@ josevalim:
|
|
135
228
|
|
136
229
|
This feature was available before only for localhost with `:allow_localhost => true`
|
137
230
|
|
138
|
-
|
231
|
+
WebMock.disable_net_connect!(:allow => "www.example.org")
|
139
232
|
|
140
|
-
|
233
|
+
Net::HTTP.get('www.something.com', '/') # ===> Failure
|
141
234
|
|
142
|
-
|
235
|
+
Net::HTTP.get('www.example.org', '/') # ===> Allowed.
|
143
236
|
|
144
237
|
* Fixed Net::HTTP adapter so that it preserves the original behavior of Net::HTTP.
|
145
238
|
|
@@ -169,53 +262,53 @@ josevalim:
|
|
169
262
|
|
170
263
|
* Added support for [em-http-request](http://github.com/igrigorik/em-http-request)
|
171
264
|
|
172
|
-
* Matching query params using a hash
|
265
|
+
* Matching query params using a hash
|
173
266
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
267
|
+
stub_http_request(:get, "www.example.com").with(:query => {"a" => ["b", "c"]})
|
268
|
+
|
269
|
+
RestClient.get("http://www.example.com/?a[]=b&a[]=c") # ===> Success
|
270
|
+
|
271
|
+
request(:get, "www.example.com").with(:query => {"a" => ["b", "c"]}).should have_been_made # ===> Success
|
179
272
|
|
180
273
|
* Matching request body against a hash. Body can be URL-Encoded, JSON or XML.
|
181
274
|
|
182
275
|
(Thanks to Steve Tooke for the idea and a solution for url-encoded bodies)
|
183
276
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
277
|
+
stub_http_request(:post, "www.example.com").
|
278
|
+
with(:body => {:data => {:a => '1', :b => 'five'}})
|
279
|
+
|
280
|
+
RestClient.post('www.example.com', "data[a]=1&data[b]=five",
|
281
|
+
:content_type => 'application/x-www-form-urlencoded') # ===> Success
|
282
|
+
|
283
|
+
RestClient.post('www.example.com', '{"data":{"a":"1","b":"five"}}',
|
284
|
+
:content_type => 'application/json') # ===> Success
|
285
|
+
|
286
|
+
RestClient.post('www.example.com', '<data a="1" b="five" />',
|
287
|
+
:content_type => 'application/xml' ) # ===> Success
|
288
|
+
|
289
|
+
request(:post, "www.example.com").
|
290
|
+
with(:body => {:data => {:a => '1', :b => 'five'}},
|
291
|
+
:headers => 'Content-Type' => 'application/json').should have_been_made # ===> Success
|
199
292
|
|
200
293
|
* Request callbacks (Thanks to Myron Marston for all suggestions)
|
201
294
|
|
202
295
|
WebMock can now invoke callbacks for stubbed or real requests:
|
203
296
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
297
|
+
WebMock.after_request do |request_signature, response|
|
298
|
+
puts "Request #{request_signature} was made and #{response} was returned"
|
299
|
+
end
|
300
|
+
|
208
301
|
invoke callbacks for real requests only and except requests made with Patron client
|
209
302
|
|
210
|
-
|
211
|
-
|
212
|
-
|
303
|
+
WebMock.after_request(:except => [:patron], :real_requests_only => true) do |request_signature, response|
|
304
|
+
puts "Request #{request_signature} was made and #{response} was returned"
|
305
|
+
end
|
213
306
|
|
214
307
|
* `to_raise()` now accepts an exception instance or a string as argument in addition to an exception class
|
215
308
|
|
216
|
-
|
217
|
-
|
218
|
-
|
309
|
+
stub_request(:any, 'www.example.net').to_raise(StandardError.new("some error"))
|
310
|
+
|
311
|
+
stub_request(:any, 'www.example.net').to_raise("some error")
|
219
312
|
|
220
313
|
* Matching requests based on a URI is 30% faster
|
221
314
|
|
@@ -231,7 +324,7 @@ josevalim:
|
|
231
324
|
|
232
325
|
* Fixed gemspec file. Thanks to Razic
|
233
326
|
|
234
|
-
## 1.2.0
|
327
|
+
## 1.2.0
|
235
328
|
|
236
329
|
* RSpec 2 compatibility. Thanks to Sam Phillips!
|
237
330
|
|
@@ -243,14 +336,14 @@ josevalim:
|
|
243
336
|
## 1.1.0
|
244
337
|
|
245
338
|
* [VCR](http://github.com/myronmarston/vcr/) compatibility. Many thanks to Myron Marston for all suggestions.
|
246
|
-
|
247
|
-
* Support for stubbing requests and returning responses with multiple headers with the same name. i.e multiple Accept headers.
|
248
339
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
340
|
+
* Support for stubbing requests and returning responses with multiple headers with the same name. i.e multiple Accept headers.
|
341
|
+
|
342
|
+
stub_http_request(:get, 'www.example.com').
|
343
|
+
with(:headers => {'Accept' => ['image/png', 'image/jpeg']}).
|
344
|
+
to_return(:body => 'abc')
|
345
|
+
RestClient.get('www.example.com',
|
346
|
+
{"Accept" => ['image/png', 'image/jpeg']}) # ===> "abc\n"
|
254
347
|
|
255
348
|
* When real net connections are disabled and unstubbed request is made, WebMock throws WebMock::NetConnectNotAllowedError instead of assertion error or StandardError.
|
256
349
|
|
@@ -263,38 +356,38 @@ josevalim:
|
|
263
356
|
|
264
357
|
* Responses dynamically evaluated from block (idea and implementation by Tom Ward)
|
265
358
|
|
266
|
-
|
267
|
-
|
359
|
+
stub_request(:any, 'www.example.net').
|
360
|
+
to_return { |request| {:body => request.body} }
|
268
361
|
|
269
|
-
|
362
|
+
RestClient.post('www.example.net', 'abc') # ===> "abc\n"
|
270
363
|
|
271
364
|
* Responses dynamically evaluated from lambda (idea and implementation by Tom Ward)
|
272
365
|
|
273
|
-
|
274
|
-
|
366
|
+
stub_request(:any, 'www.example.net').
|
367
|
+
to_return(lambda { |request| {:body => request.body} })
|
275
368
|
|
276
|
-
|
369
|
+
RestClient.post('www.example.net', 'abc') # ===> "abc\n"
|
277
370
|
|
278
|
-
* Response with custom status message
|
371
|
+
* Response with custom status message
|
279
372
|
|
280
|
-
|
373
|
+
stub_request(:any, "www.example.com").to_return(:status => [500, "Internal Server Error"])
|
281
374
|
|
282
|
-
|
283
|
-
|
375
|
+
req = Net::HTTP::Get.new("/")
|
376
|
+
Net::HTTP.start("www.example.com") { |http| http.request(req) }.message # ===> "Internal Server Error"
|
284
377
|
|
285
378
|
* Raising timeout errors (suggested by Jeffrey Jones) (compatibility with Ruby 1.8.6 by Mack Earnhardt)
|
286
379
|
|
287
|
-
|
380
|
+
stub_request(:any, 'www.example.net').to_timeout
|
288
381
|
|
289
|
-
|
382
|
+
RestClient.post('www.example.net', 'abc') # ===> RestClient::RequestTimeout
|
290
383
|
|
291
384
|
* External requests can be disabled while allowing localhost (idea and implementation by Mack Earnhardt)
|
292
385
|
|
293
|
-
|
386
|
+
WebMock.disable_net_connect!(:allow_localhost => true)
|
294
387
|
|
295
|
-
|
388
|
+
Net::HTTP.get('www.something.com', '/') # ===> Failure
|
296
389
|
|
297
|
-
|
390
|
+
Net::HTTP.get('localhost:9887', '/') # ===> Allowed. Perhaps to Selenium?
|
298
391
|
|
299
392
|
|
300
393
|
### Bug fixes
|
@@ -307,82 +400,82 @@ josevalim:
|
|
307
400
|
* Fixed issue where response status code was not read from raw (curl -is) responses
|
308
401
|
|
309
402
|
## 0.9.0
|
310
|
-
|
403
|
+
|
311
404
|
* Matching requests against provided block (by Sergio Gil)
|
312
405
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
406
|
+
stub_request(:post, "www.example.com").with { |request| request.body == "abc" }.to_return(:body => "def")
|
407
|
+
RestClient.post('www.example.com', 'abc') # ===> "def\n"
|
408
|
+
request(:post, "www.example.com").with { |req| req.body == "abc" }.should have_been_made
|
409
|
+
#or
|
410
|
+
assert_requested(:post, "www.example.com") { |req| req.body == "abc" }
|
318
411
|
|
319
412
|
* Matching request body against regular expressions (suggested by Ben Pickles)
|
320
413
|
|
321
|
-
|
322
|
-
|
323
|
-
|
414
|
+
stub_request(:post, "www.example.com").with(:body => /^.*world$/).to_return(:body => "abc")
|
415
|
+
RestClient.post('www.example.com', 'hello world') # ===> "abc\n"
|
416
|
+
|
324
417
|
* Matching request headers against regular expressions (suggested by Ben Pickles)
|
325
418
|
|
326
|
-
|
327
|
-
|
419
|
+
stub_request(:post, "www.example.com").with(:headers => {"Content-Type" => /image\/.+/}).to_return(:body => "abc")
|
420
|
+
RestClient.post('www.example.com', '', {'Content-Type' => 'image/png'}) # ===> "abc\n"
|
328
421
|
|
329
422
|
* Replaying raw responses recorded with `curl -is`
|
330
423
|
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
stub_request(:get, "www.example.com").to_return(raw_response_file)
|
424
|
+
`curl -is www.example.com > /tmp/example_curl_-is_output.txt`
|
425
|
+
raw_response_file = File.new("/tmp/example_curl_-is_output.txt")
|
426
|
+
|
427
|
+
from file
|
337
428
|
|
338
|
-
|
339
|
-
|
340
|
-
|
429
|
+
stub_request(:get, "www.example.com").to_return(raw_response_file)
|
430
|
+
|
431
|
+
or string
|
432
|
+
|
433
|
+
stub_request(:get, "www.example.com").to_return(raw_response_file.read)
|
341
434
|
|
342
435
|
* Multiple responses for repeated requests
|
343
436
|
|
344
|
-
|
345
|
-
|
346
|
-
|
437
|
+
stub_request(:get, "www.example.com").to_return({:body => "abc"}, {:body => "def"})
|
438
|
+
Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
|
439
|
+
Net::HTTP.get('www.example.com', '/') # ===> "def\n"
|
347
440
|
|
348
441
|
* Multiple responses using chained `to_return()` or `to_raise()` declarations
|
349
442
|
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
443
|
+
stub_request(:get, "www.example.com").
|
444
|
+
to_return({:body => "abc"}).then. #then() just is a syntactic sugar
|
445
|
+
to_return({:body => "def"}).then.
|
446
|
+
to_raise(MyException)
|
447
|
+
Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
|
448
|
+
Net::HTTP.get('www.example.com', '/') # ===> "def\n"
|
449
|
+
Net::HTTP.get('www.example.com', '/') # ===> MyException raised
|
450
|
+
|
358
451
|
* Specifying number of times given response should be returned
|
359
452
|
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
453
|
+
stub_request(:get, "www.example.com").
|
454
|
+
to_return({:body => "abc"}).times(2).then.
|
455
|
+
to_return({:body => "def"})
|
456
|
+
|
457
|
+
Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
|
458
|
+
Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
|
459
|
+
Net::HTTP.get('www.example.com', '/') # ===> "def\n"
|
460
|
+
|
368
461
|
* Added support for `Net::HTTP::Post#body_stream`
|
369
462
|
|
370
|
-
|
371
|
-
|
463
|
+
This fixes compatibility with new versions of RestClient
|
464
|
+
|
372
465
|
* WebMock doesn't suppress default request headers added by http clients anymore.
|
373
466
|
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
467
|
+
i.e. Net::HTTP adds `'Accept'=>'*/*'` to all requests by default
|
468
|
+
|
469
|
+
|
470
|
+
|
378
471
|
## 0.8.2
|
379
|
-
|
472
|
+
|
380
473
|
* Fixed issue where WebMock was not closing IO object passed as response body after reading it.
|
381
474
|
* 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
|
382
475
|
|
383
476
|
|
384
477
|
## 0.8.1
|
385
|
-
|
478
|
+
|
386
479
|
* Fixed HTTPClient adapter compatibility with Ruby 1.8.6 (reported by Piotr Usewicz)
|
387
480
|
* Net:HTTP adapter now handles request body assigned as Net::HTTP::Post#body attribute (fixed by Mack Earnhardt)
|
388
481
|
* Fixed issue where requests were not matching stubs with Accept header set.(reported by Piotr Usewicz)
|
@@ -394,8 +487,8 @@ josevalim:
|
|
394
487
|
## 0.8.0
|
395
488
|
|
396
489
|
* Support for HTTPClient (sync and async requests)
|
397
|
-
* Support for dynamic responses. Response body and headers can be now declared as lambda.
|
398
|
-
|
490
|
+
* Support for dynamic responses. Response body and headers can be now declared as lambda.
|
491
|
+
(Thanks to Ivan Vega ( @ivanyv ) for suggesting this feature)
|
399
492
|
* Support for stubbing and expecting requests with empty body
|
400
493
|
* Executing non-stubbed request leads to failed expectation instead of error
|
401
494
|
|