File: no_cassette.feature

package info (click to toggle)
ruby-vcr 6.0.0%2Breally5.0.0-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,320 kB
  • sloc: ruby: 8,456; sh: 177; makefile: 7
file content (151 lines) | stat: -rw-r--r-- 4,937 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
Feature: Error for HTTP request made when no cassette is in use

  VCR is designed to help you remove all HTTP dependencies from your
  test suite.  To assist with this, VCR will cause an exception to be
  raised when an HTTP request is made while there is no cassette in
  use.  The error is helpful to pinpoint where HTTP requests are
  made so you can use a VCR cassette at that point in your code.

  If you want insight about how VCR attempted to handle the request,
  you can use the [debug\_logger](../configuration/debug-logging)
  configuration option to log more details.

  If you want to allow an HTTP request to proceed as normal, you can
  set the [allow\_http\_connections\_when\_no\_cassette](../configuration/allow-http-connections-when-no-cassette)
  configuration option or you can temporarily turn VCR off:

    - `VCR.turn_off!` => turn VCR off so HTTP requests are allowed.
      Cassette insertions will trigger an error.
    - `VCR.turn_off!(:ignore_cassettes => true)` => turn
      VCR off and ignore cassette insertions (so that no error is raised).
    - `VCR.turn_on!` => turn VCR back on
    - `VCR.turned_off { ... }` => turn VCR off for the duration of the
      provided block.

  @exclude-jruby
  Scenario Outline: Error for request when no cassette is in use
    Given a file named "no_cassette_error.rb" with:
      """ruby
      include_http_adapter_for("<http_lib>")

      require 'vcr'

      VCR.configure do |c|
        <configuration>
        c.cassette_library_dir = 'cassettes'
      end

      response_body_for(:get, 'http://example.com/')
      """
    When I run `ruby no_cassette_error.rb`
    Then it should fail with "An HTTP request has been made that VCR does not know how to handle"

    Examples:
      | configuration         | http_lib              |
      | c.hook_into :webmock  | net/http              |
      | c.hook_into :webmock  | httpclient            |
      | c.hook_into :webmock  | curb                  |
      | c.hook_into :webmock  | patron                |
      | c.hook_into :webmock  | em-http-request       |
      | c.hook_into :webmock  | typhoeus              |
      | c.hook_into :typhoeus | typhoeus              |
      | c.hook_into :excon    | excon                 |
      | c.hook_into :faraday  | faraday (w/ net_http) |

  Scenario: Temporarily turn VCR off to allow HTTP requests to procede as normal
    Given a file named "turn_off_vcr.rb" with:
      """ruby
      $server = start_sinatra_app do
        get('/') { 'Hello' }
      end

      require 'vcr'

      VCR.configure do |c|
        c.hook_into :webmock
      end
      WebMock.allow_net_connect!

      def make_request(context)
        puts context
        puts Net::HTTP.get_response('localhost', '/', $server.port).body
      rescue => e
        puts "Error: #{e.class}"
      end

      VCR.turned_off do
        make_request "In VCR.turned_off block"
      end

      make_request "Outside of VCR.turned_off block"

      VCR.turn_off!
      make_request "After calling VCR.turn_off!"

      VCR.turn_on!
      make_request "After calling VCR.turn_on!"
      """
    When I run `ruby turn_off_vcr.rb`
    Then the output should contain:
      """
      In VCR.turned_off block
      Hello
      """
    And the output should contain:
      """
      Outside of VCR.turned_off block
      Error: VCR::Errors::UnhandledHTTPRequestError
      """
    And the output should contain:
      """
      After calling VCR.turn_off!
      Hello
      """
    And the output should contain:
      """
      After calling VCR.turn_on!
      Error: VCR::Errors::UnhandledHTTPRequestError
      """

  Scenario: Turning VCR off prevents cassettes from being inserted
    Given a file named "turn_off_vcr_and_insert_cassette.rb" with:
      """ruby
      require 'vcr'

      VCR.configure do |c|
        c.hook_into :webmock
      end
      WebMock.allow_net_connect!

      VCR.turn_off!
      VCR.insert_cassette('example')
      """
    When I run `ruby turn_off_vcr_and_insert_cassette.rb`
    Then it should fail with "VCR is turned off.  You must turn it on before you can insert a cassette."

  Scenario: Turning VCR off with `:ignore_cassettes => true` ignores cassettes
    Given a file named "turn_off_vcr_and_insert_cassette.rb" with:
      """ruby
      $server = start_sinatra_app do
        get('/') { 'Hello' }
      end

      require 'vcr'

      VCR.configure do |c|
        c.cassette_library_dir = 'cassettes'
        c.hook_into :webmock
      end
      WebMock.allow_net_connect!

      VCR.turn_off!(:ignore_cassettes => true)

      VCR.use_cassette('example') do
        response = Net::HTTP.get_response('localhost', '/', $server.port).body
        puts "Response: #{response}"
      end
      """
    When I run `ruby turn_off_vcr_and_insert_cassette.rb`
    Then it should pass with "Response: Hello"
     And the file "cassettes/example.yml" should not exist