vcr 0.1.1 → 0.1.2
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.
- data/History.rdoc +13 -0
- data/README.rdoc +61 -23
- data/VERSION +1 -1
- data/features/fixtures/vcr_cassettes/1.8.6/cucumber_tags/replay_cassette3.yml +85 -0
- data/features/fixtures/vcr_cassettes/1.8.7/cucumber_tags/replay_cassette3.yml +85 -0
- data/features/fixtures/vcr_cassettes/1.9.1/cucumber_tags/replay_cassette3.yml +85 -0
- data/features/record_response.feature +8 -2
- data/features/replay_recorded_response.feature +12 -2
- data/features/step_definitions/vcr_steps.rb +37 -21
- data/features/support/env.rb +1 -1
- data/lib/vcr.rb +4 -3
- data/lib/vcr/cassette.rb +9 -1
- data/lib/vcr/{fake_web_extensions.rb → extensions/fake_web.rb} +6 -0
- data/lib/vcr/{net_http_extensions.rb → extensions/net_http.rb} +4 -1
- data/lib/vcr/{net_read_adapter_extensions.rb → extensions/net_read_adapter.rb} +0 -0
- data/spec/cassette_spec.rb +12 -8
- data/spec/{fake_web_extensions_spec.rb → extensions/fake_web_spec.rb} +9 -2
- data/spec/{net_http_extensions_spec.rb → extensions/net_http_spec.rb} +7 -2
- data/spec/{net_read_adapter_extensions_spec.rb → extensions/net_read_adapter_spec.rb} +1 -1
- data/spec/fixtures/1.8.6/cassette_spec/example.yml +94 -64
- data/spec/fixtures/1.8.7/cassette_spec/example.yml +94 -64
- data/spec/fixtures/1.9.1/cassette_spec/example.yml +30 -0
- data/spec/vcr_spec.rb +1 -1
- data/vcr.gemspec +15 -12
- metadata +16 -13
data/History.rdoc
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
== 0.1.2 March 4, 2010
|
3
|
+
* Added explanatory note about VCR to FakeWeb::NetConnectNotAllowedError#message.
|
4
|
+
* Got things to work for when a cassette records multiple requests made to the same URL with the same HTTP verb,
|
5
|
+
but different responses. We have to register an array of responses with fakeweb.
|
6
|
+
* Fixed our Net::HTTP monkey patch so that it only stores a the recorded response once per request.
|
7
|
+
Internally, Net::HTTP#request recursively calls itself (passing slightly different arguments) in certain circumstances.
|
8
|
+
|
9
|
+
== 0.1.1 February 25, 2010
|
10
|
+
* Handle asynchronous HTTP requests (such as for mechanize). Bug reported by {Thibaud Guillaume-Gentil}[http://github.com/thibaudgg].
|
11
|
+
|
12
|
+
== 0.1.0 February 25, 2010
|
13
|
+
* Initial release. Basic recording and replaying of responses works.
|
data/README.rdoc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
= VCR
|
2
2
|
|
3
3
|
VCR provides helpers to record HTTP requests for URIs that are not registered with fakeweb, and replay them later.
|
4
|
-
It provides built-in support for cucumber
|
4
|
+
It works with any ruby testing framework and provides built-in support for cucumber.
|
5
5
|
|
6
6
|
== Installation
|
7
7
|
|
@@ -12,7 +12,10 @@ It provides built-in support for cucumber, but works with any ruby testing frame
|
|
12
12
|
This README assumes you are familiar with FakeWeb; if not, please checkout the {README}[http://github.com/chrisk/fakeweb/blob/master/README.rdoc].
|
13
13
|
|
14
14
|
VCR was inspired by {NetRecorder}[http://github.com/chrisyoung/netrecorder], but was designed from the ground up to support
|
15
|
-
localized recording and replaying, rather than the global recording and replaying of NetRecorder.
|
15
|
+
localized recording and replaying, rather than the global recording and replaying of NetRecorder. In general, I believe that
|
16
|
+
tests should not rely upon anything global. You're coupling your test to something outside of it that may later change and
|
17
|
+
break the test. It's far better to localize things to each test, as much as possible. VCR, in combination with FakeWeb,
|
18
|
+
makes it easy to do this with the recording and replying of HTTP responses.
|
16
19
|
|
17
20
|
== Cassettes
|
18
21
|
|
@@ -24,7 +27,7 @@ the following:
|
|
24
27
|
* It register these responses with fakeweb (depending on the cassette's :record option--see below)
|
25
28
|
* It sets the <tt>FakeWeb.allow_net_connect</tt> setting based on the cassette's :record option.
|
26
29
|
|
27
|
-
While a cassette is active, any HTTP requests to a URL of a previously recorded
|
30
|
+
While a cassette is active, any HTTP requests to a URL of a previously recorded response will use
|
28
31
|
the recorded response. New HTTP requests (i.e. HTTP requests that have not been previously recorded)
|
29
32
|
will be recorded to the same cache file, depending on your :record option. When you destroy a cassette,
|
30
33
|
it does the following:
|
@@ -35,27 +38,29 @@ it does the following:
|
|
35
38
|
|
36
39
|
== Record modes
|
37
40
|
|
38
|
-
VCR supports 3 record modes, which
|
41
|
+
VCR supports 3 record modes, which configure when it records new responses. You can set a default
|
39
42
|
record mode in your configuration (see below) and a per-cassette record mode when creating a cassette. The record
|
40
43
|
modes are:
|
41
44
|
|
42
|
-
*
|
45
|
+
* <tt>:all</tt> - This will cause VCR to re-record all HTTP requests that occur.
|
43
46
|
When the cassette is created, it will not register any of the cached responses with fakeweb.
|
44
|
-
<tt>FakeWeb.allow_net_connect</tt> will be set to true, so it can record the requests.
|
45
|
-
|
47
|
+
<tt>FakeWeb.allow_net_connect</tt> will be set to true, so it can record the requests. Use this
|
48
|
+
when you want to re-record all of the HTTP requests for a cassette. Alternately, you can simply
|
49
|
+
delete the corresponding cache file and use the :unregistered record mode, described below.
|
50
|
+
* <tt>:none</tt> - This will prevent VCR from recording, or even allowing, any new HTTP requests.
|
46
51
|
The previously recorded responses will be registered with fakeweb. <tt>FakeWeb.allow_net_connect</tt> will be set to
|
47
|
-
false, so that no new HTTP connections are allowed.
|
48
|
-
|
52
|
+
false, so that no new HTTP connections are allowed. Use this when you want to guarantee that no external
|
53
|
+
HTTP requests will be made while the given cassette is active. Fakeweb will raise an error in this case.
|
54
|
+
* <tt>:unregistered</tt> - This will use the previously recorded responses, and record any new requests that are not registered with
|
49
55
|
fakeweb. The previously recorded responses will be registered with fakeweb. <tt>FakeWeb.allow_net_connect</tt> will be
|
50
|
-
set to true, so that VCR will record any new HTTP requests within the cassette.
|
51
|
-
|
52
|
-
|
53
|
-
it makes a new HTTP request that wasn't made when the cassette was first recorded. With :none, you would
|
54
|
-
get an error from FakeWeb (since allow_net_connect is set to false). With :unregistered, the new response
|
55
|
-
would get saved in the cassette's yaml file, and automatically get used in the future.
|
56
|
+
set to true, so that VCR will record any new HTTP requests within the cassette. Use this when it's ok for external HTTP
|
57
|
+
requests to be made without you explicitly allowing it. New requests will get saved to the cassettes yml file, and
|
58
|
+
automatically get used in the future.
|
56
59
|
|
57
60
|
== Configuration
|
58
61
|
|
62
|
+
require 'vcr'
|
63
|
+
|
59
64
|
# Set the default allow_net_connect option--usually you'll want this off.
|
60
65
|
# You don't usually want your test suite to make HTTP connections, do you?
|
61
66
|
FakeWeb.allow_net_connect = false
|
@@ -68,11 +73,12 @@ would get saved in the cassette's yaml file, and automatically get used in the f
|
|
68
73
|
c.default_cassette_record_mode = :none
|
69
74
|
end
|
70
75
|
|
71
|
-
This can go pretty much wherever, as long as this code is run before your tests, specs or scenarios.
|
76
|
+
This can go pretty much wherever, as long as this code is run before your tests, specs or scenarios. I tend
|
77
|
+
to put it in spec/support/vcr.rb, test/support/vcr.rb or features/support/vcr.rb.
|
72
78
|
|
73
79
|
== Usage with your favorite test/spec framework
|
74
80
|
|
75
|
-
VCR can easily be used with any ruby test
|
81
|
+
VCR can easily be used with any ruby test or spec framework. Usually, you'll want to use <tt>VCR.with_cassette</tt>:
|
76
82
|
|
77
83
|
VCR.with_cassette('geocoding/Seattle, WA', :record => :unregistered) do
|
78
84
|
# do something that causes an HTTP request.
|
@@ -100,25 +106,57 @@ cache dir. The :record setting is optional--if you leave it blank, your configu
|
|
100
106
|
VCR provides special support for cucumber. You can of course use <tt>VCR.with_cassette</tt> within a step definition,
|
101
107
|
and that's the recommended way for any of your step definitions. But many times I find myself using generic step definitions
|
102
108
|
provided by another library (such as the webrat/capybara web steps generated by cucumber-rails), and I don't want to modify
|
103
|
-
these. VCR provides cucumber tagging support to help in these cases
|
109
|
+
these. VCR provides cucumber tagging support to help in these cases.
|
110
|
+
|
111
|
+
First, tag your scenario with something descriptive:
|
104
112
|
|
105
|
-
# in a cucumber feature file...
|
106
113
|
@facebook_http_request
|
107
114
|
Scenario: Sign up with facebook connect
|
108
115
|
|
109
|
-
|
116
|
+
Then let VCR know about this tag, in features/support/vcr.rb (or some similar support file):
|
117
|
+
|
110
118
|
VCR.cucumber_tags do |t|
|
111
119
|
t.tags '@facebook_http_request', '@twitter_status_update', :record => :none
|
112
120
|
t.tags '@another_scenario_tag' # the default record mode will be used for this tag.
|
113
121
|
end
|
114
122
|
|
115
|
-
# Note: you'd probably also want to put your VCR config in this file (see above).
|
116
|
-
|
117
123
|
For each of the tags you specify in your cucumber_tags block, VCR will set up the appropriate
|
118
124
|
{Before and After hooks}[http://wiki.github.com/aslakhellesoy/cucumber/hooks] to use a cassette
|
119
125
|
for the entire scenario. The tag (minus the '@') will be used as the cassette name, and it'll
|
120
126
|
go in the cucumber_tags subdirectory of the configured cache dir.
|
121
127
|
|
128
|
+
== Suggested Workflow
|
129
|
+
|
130
|
+
First, configure VCR and FakeWeb as I have above. I like setting <tt>FakeWeb.allow_net_connect</tt> to <tt>false</tt>
|
131
|
+
and VCR's <tt>default_cassette_record_mode</tt> to <tt>:none</tt> so that no new HTTP requests are made without me
|
132
|
+
explicitly allowing it.
|
133
|
+
|
134
|
+
When an HTTP request is made, you'll get an {error from FakeWeb}[http://github.com/chrisk/fakeweb/blob/fakeweb-1.2.8/lib/fake_web/ext/net_http.rb#L62-63],
|
135
|
+
such as:
|
136
|
+
|
137
|
+
FakeWeb::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: get http://example.com
|
138
|
+
|
139
|
+
Find the place that is making the HTTP request (the backtrace should help here). If you've already recorded this HTTP
|
140
|
+
request to a cassette from a different test, you can simply re-use the cassette. Use <tt>VCR.with_cassette</tt>, as
|
141
|
+
shown above. You may also want to refactor this into a helper method that sets up the VCR cassette and does whatever
|
142
|
+
makes the HTTP request:
|
143
|
+
|
144
|
+
def set_user_address(user, address, city, state)
|
145
|
+
VCR.with_cassette("geocoding/#{address}, #{city}, #{state}", :record => :unregistered) do
|
146
|
+
user.address.update_attributes!(:address => address, :city => city, :state => state)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
In this case, I've used a dynamic cassette name based on the address being geocoded. That way, each separate address
|
151
|
+
gets a different cassette, and tests that set the same user address will reuse the same cassette. I've also set
|
152
|
+
the record mode to <tt>:unregistered</tt> so that VCR will automatically record geocoding requests for a new address
|
153
|
+
to a new cassette, without me having to do anything.
|
154
|
+
|
155
|
+
If the HTTP request that triggered the error is new, you'll have to record it for the first time. Simply use <tt>VCR.with_cassette</tt>
|
156
|
+
with the record mode set to <tt>:unregistered</tt> or <tt>:all</tt>. Run the test again, and VCR will record the HTTP response. I usually
|
157
|
+
remove the record mode at this point so that it uses the default of <tt>:none</tt> in the future. Future test runs will use the
|
158
|
+
recorded response, and if your code changes so that it is making a new HTTP request, you'll get the same FakeWeb error as shown above.
|
159
|
+
|
122
160
|
== Ruby Version Compatibility
|
123
161
|
|
124
162
|
specs.should pass if RUBY_VERSION =~ /^1.(8.6|8.7|9.1)$/
|
@@ -130,7 +168,7 @@ go in the cucumber_tags subdirectory of the configured cache dir.
|
|
130
168
|
before the cassette reads or writes to the file.
|
131
169
|
* You can use a directory separator (i.e. '/') in your cassette names to cause it to use a subdirectory
|
132
170
|
of the cache_dir. The cucumber tagging support uses this.
|
133
|
-
* VCR maintains a simple stack of
|
171
|
+
* VCR maintains a simple stack of cassettes. This allows you to nest them as deeply as you want.
|
134
172
|
This is particularly useful when you have a cucumber step definition that uses a cassette, and
|
135
173
|
you also want to use a cassette for the entire scenario using the tagging support.
|
136
174
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
@@ -0,0 +1,85 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::RecordedResponse
|
3
|
+
method: :get
|
4
|
+
uri: http://example.com:80/
|
5
|
+
response: !ruby/object:Net::HTTPOK
|
6
|
+
body: |
|
7
|
+
<HTML>
|
8
|
+
<HEAD>
|
9
|
+
<TITLE>Example Web Page</TITLE>
|
10
|
+
</HEAD>
|
11
|
+
<body>
|
12
|
+
<p>
|
13
|
+
This is not the real response from example.com
|
14
|
+
</p>
|
15
|
+
</BODY>
|
16
|
+
</HTML>
|
17
|
+
|
18
|
+
|
19
|
+
body_exist: true
|
20
|
+
code: "200"
|
21
|
+
header:
|
22
|
+
etag:
|
23
|
+
- "\"24ec5-1b6-4059a80bfd280\""
|
24
|
+
last-modified:
|
25
|
+
- Tue, 15 Nov 2005 13:24:10 GMT
|
26
|
+
connection:
|
27
|
+
- Keep-Alive
|
28
|
+
content-type:
|
29
|
+
- text/html; charset=UTF-8
|
30
|
+
date:
|
31
|
+
- Thu, 25 Feb 2010 15:22:32 GMT
|
32
|
+
server:
|
33
|
+
- Apache/2.2.3 (CentOS)
|
34
|
+
content-length:
|
35
|
+
- "438"
|
36
|
+
age:
|
37
|
+
- "2643"
|
38
|
+
accept-ranges:
|
39
|
+
- bytes
|
40
|
+
http_version: "1.1"
|
41
|
+
message: OK
|
42
|
+
read: true
|
43
|
+
socket:
|
44
|
+
- !ruby/struct:VCR::RecordedResponse
|
45
|
+
method: :get
|
46
|
+
uri: http://example.com:80/
|
47
|
+
response: !ruby/object:Net::HTTPOK
|
48
|
+
body: |
|
49
|
+
<HTML>
|
50
|
+
<HEAD>
|
51
|
+
<TITLE>Example Web Page</TITLE>
|
52
|
+
</HEAD>
|
53
|
+
<body>
|
54
|
+
<p>
|
55
|
+
This is another fake response from example.com
|
56
|
+
</p>
|
57
|
+
</BODY>
|
58
|
+
</HTML>
|
59
|
+
|
60
|
+
|
61
|
+
body_exist: true
|
62
|
+
code: "200"
|
63
|
+
header:
|
64
|
+
etag:
|
65
|
+
- "\"24ec5-1b6-4059a80bfd280\""
|
66
|
+
last-modified:
|
67
|
+
- Tue, 15 Nov 2005 13:24:10 GMT
|
68
|
+
connection:
|
69
|
+
- Keep-Alive
|
70
|
+
content-type:
|
71
|
+
- text/html; charset=UTF-8
|
72
|
+
date:
|
73
|
+
- Thu, 25 Feb 2010 15:22:32 GMT
|
74
|
+
server:
|
75
|
+
- Apache/2.2.3 (CentOS)
|
76
|
+
content-length:
|
77
|
+
- "438"
|
78
|
+
age:
|
79
|
+
- "2643"
|
80
|
+
accept-ranges:
|
81
|
+
- bytes
|
82
|
+
http_version: "1.1"
|
83
|
+
message: OK
|
84
|
+
read: true
|
85
|
+
socket:
|
@@ -0,0 +1,85 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::RecordedResponse
|
3
|
+
method: :get
|
4
|
+
uri: http://example.com:80/
|
5
|
+
response: !ruby/object:Net::HTTPOK
|
6
|
+
body: |
|
7
|
+
<HTML>
|
8
|
+
<HEAD>
|
9
|
+
<TITLE>Example Web Page</TITLE>
|
10
|
+
</HEAD>
|
11
|
+
<body>
|
12
|
+
<p>
|
13
|
+
This is not the real response from example.com
|
14
|
+
</p>
|
15
|
+
</BODY>
|
16
|
+
</HTML>
|
17
|
+
|
18
|
+
|
19
|
+
body_exist: true
|
20
|
+
code: "200"
|
21
|
+
header:
|
22
|
+
etag:
|
23
|
+
- "\"24ec5-1b6-4059a80bfd280\""
|
24
|
+
last-modified:
|
25
|
+
- Tue, 15 Nov 2005 13:24:10 GMT
|
26
|
+
connection:
|
27
|
+
- Keep-Alive
|
28
|
+
content-type:
|
29
|
+
- text/html; charset=UTF-8
|
30
|
+
date:
|
31
|
+
- Thu, 25 Feb 2010 15:22:32 GMT
|
32
|
+
server:
|
33
|
+
- Apache/2.2.3 (CentOS)
|
34
|
+
content-length:
|
35
|
+
- "438"
|
36
|
+
age:
|
37
|
+
- "2643"
|
38
|
+
accept-ranges:
|
39
|
+
- bytes
|
40
|
+
http_version: "1.1"
|
41
|
+
message: OK
|
42
|
+
read: true
|
43
|
+
socket:
|
44
|
+
- !ruby/struct:VCR::RecordedResponse
|
45
|
+
method: :get
|
46
|
+
uri: http://example.com:80/
|
47
|
+
response: !ruby/object:Net::HTTPOK
|
48
|
+
body: |
|
49
|
+
<HTML>
|
50
|
+
<HEAD>
|
51
|
+
<TITLE>Example Web Page</TITLE>
|
52
|
+
</HEAD>
|
53
|
+
<body>
|
54
|
+
<p>
|
55
|
+
This is another fake response from example.com
|
56
|
+
</p>
|
57
|
+
</BODY>
|
58
|
+
</HTML>
|
59
|
+
|
60
|
+
|
61
|
+
body_exist: true
|
62
|
+
code: "200"
|
63
|
+
header:
|
64
|
+
etag:
|
65
|
+
- "\"24ec5-1b6-4059a80bfd280\""
|
66
|
+
last-modified:
|
67
|
+
- Tue, 15 Nov 2005 13:24:10 GMT
|
68
|
+
connection:
|
69
|
+
- Keep-Alive
|
70
|
+
content-type:
|
71
|
+
- text/html; charset=UTF-8
|
72
|
+
date:
|
73
|
+
- Thu, 25 Feb 2010 15:22:32 GMT
|
74
|
+
server:
|
75
|
+
- Apache/2.2.3 (CentOS)
|
76
|
+
content-length:
|
77
|
+
- "438"
|
78
|
+
age:
|
79
|
+
- "2643"
|
80
|
+
accept-ranges:
|
81
|
+
- bytes
|
82
|
+
http_version: "1.1"
|
83
|
+
message: OK
|
84
|
+
read: true
|
85
|
+
socket:
|
@@ -0,0 +1,85 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::RecordedResponse
|
3
|
+
:method: :get
|
4
|
+
:uri: http://example.com:80/
|
5
|
+
:response: !ruby/object:Net::HTTPOK
|
6
|
+
body: |
|
7
|
+
<HTML>
|
8
|
+
<HEAD>
|
9
|
+
<TITLE>Example Web Page</TITLE>
|
10
|
+
</HEAD>
|
11
|
+
<body>
|
12
|
+
<p>
|
13
|
+
This is not the real response from example.com
|
14
|
+
</p>
|
15
|
+
</BODY>
|
16
|
+
</HTML>
|
17
|
+
|
18
|
+
|
19
|
+
body_exist: true
|
20
|
+
code: "200"
|
21
|
+
header:
|
22
|
+
server:
|
23
|
+
- Apache/2.2.3 (Red Hat)
|
24
|
+
last-modified:
|
25
|
+
- Tue, 15 Nov 2005 13:24:10 GMT
|
26
|
+
etag:
|
27
|
+
- "\"b300b4-1b6-4059a80bfd280\""
|
28
|
+
accept-ranges:
|
29
|
+
- bytes
|
30
|
+
content-type:
|
31
|
+
- text/html; charset=UTF-8
|
32
|
+
connection:
|
33
|
+
- Keep-Alive
|
34
|
+
date:
|
35
|
+
- Thu, 28 Jan 2010 07:14:48 GMT
|
36
|
+
age:
|
37
|
+
- "1696"
|
38
|
+
content-length:
|
39
|
+
- "438"
|
40
|
+
http_version: "1.1"
|
41
|
+
message: OK
|
42
|
+
read: true
|
43
|
+
socket:
|
44
|
+
- !ruby/struct:VCR::RecordedResponse
|
45
|
+
:method: :get
|
46
|
+
:uri: http://example.com:80/
|
47
|
+
:response: !ruby/object:Net::HTTPOK
|
48
|
+
body: |
|
49
|
+
<HTML>
|
50
|
+
<HEAD>
|
51
|
+
<TITLE>Example Web Page</TITLE>
|
52
|
+
</HEAD>
|
53
|
+
<body>
|
54
|
+
<p>
|
55
|
+
This is another fake response from example.com
|
56
|
+
</p>
|
57
|
+
</BODY>
|
58
|
+
</HTML>
|
59
|
+
|
60
|
+
|
61
|
+
body_exist: true
|
62
|
+
code: "200"
|
63
|
+
header:
|
64
|
+
server:
|
65
|
+
- Apache/2.2.3 (Red Hat)
|
66
|
+
last-modified:
|
67
|
+
- Tue, 15 Nov 2005 13:24:10 GMT
|
68
|
+
etag:
|
69
|
+
- "\"b300b4-1b6-4059a80bfd280\""
|
70
|
+
accept-ranges:
|
71
|
+
- bytes
|
72
|
+
content-type:
|
73
|
+
- text/html; charset=UTF-8
|
74
|
+
connection:
|
75
|
+
- Keep-Alive
|
76
|
+
date:
|
77
|
+
- Thu, 28 Jan 2010 07:14:48 GMT
|
78
|
+
age:
|
79
|
+
- "1696"
|
80
|
+
content-length:
|
81
|
+
- "438"
|
82
|
+
http_version: "1.1"
|
83
|
+
message: OK
|
84
|
+
read: true
|
85
|
+
socket:
|
@@ -43,7 +43,7 @@ Feature: Record response
|
|
43
43
|
Scenario: Make an HTTP request in a cassette with record mode set to :none
|
44
44
|
Given we do not have a "temp/record_none_cassette" cassette
|
45
45
|
When I make an HTTP get request to "http://example.com" within the "temp/record_none_cassette" none cassette
|
46
|
-
Then the HTTP get request to "http://example.com" should result in a fakeweb error
|
46
|
+
Then the HTTP get request to "http://example.com" should result in a fakeweb error that mentions VCR
|
47
47
|
And there should not be a "temp/record_none_cassette" cache file
|
48
48
|
|
49
49
|
@copy_not_the_real_response_to_temp
|
@@ -57,4 +57,10 @@ Feature: Record response
|
|
57
57
|
Scenario: Record an asynchronous request (such as for mechanize)
|
58
58
|
Given we do not have a "temp/asynchronous" cassette
|
59
59
|
When I make an asynchronous HTTP get request to "http://example.com" within the "temp/asynchronous" unregistered cassette
|
60
|
-
Then the "temp/asynchronous" cache file should have a response for "http://example.com" that matches /You have reached this web page by typing.*example\.com/
|
60
|
+
Then the "temp/asynchronous" cache file should have a response for "http://example.com" that matches /You have reached this web page by typing.*example\.com/
|
61
|
+
|
62
|
+
Scenario: Record a recursive post request
|
63
|
+
Given we do not have a "temp/recursive_post" cassette
|
64
|
+
When I make a recursive HTTP post request to "http://example.com" within the "temp/recursive_post" unregistered cassette
|
65
|
+
Then the "temp/recursive_post" cache file should have a response for "http://example.com" that matches /You have reached this web page by typing.*example\.com/
|
66
|
+
And the "temp/recursive_post" cache file should have exactly 1 response
|