File: allow_unused_http_interactions.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 (100 lines) | stat: -rw-r--r-- 3,050 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
Feature: Allow Unused HTTP Interactions

  If set to false, this cassette option will cause VCR to raise an error
  when a cassette is ejected and there are unused HTTP interactions remaining,
  unless there is already an exception unwinding the callstack.

  It verifies that all requests included in the cassette were made, and allows
  VCR to function a bit like a mock object at the HTTP layer.

  The option defaults to true (mostly for backwards compatibility).

  Background:
    Given a file named "vcr_config.rb" with:
      """ruby
      require 'vcr'

      VCR.configure do |c|
        c.hook_into :webmock
        c.cassette_library_dir = 'cassettes'
      end
      """
    And a previously recorded cassette file "cassettes/example.yml" with:
      """
      --- 
      http_interactions: 
      - request: 
          method: get
          uri: http://example.com/foo
          body: 
            encoding: UTF-8
            string: ""
          headers: {}
        response: 
          status: 
            code: 200
            message: OK
          headers: 
            Content-Length: 
            - "5"
          body: 
            encoding: UTF-8
            string: Hello
          http_version: "1.1"
        recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
      recorded_with: VCR 2.0.0
      """

  Scenario: Unused HTTP interactions are allowed by default
    Given a file named "allowed_by_default.rb" with:
      """ruby
      require 'vcr_config'

      VCR.use_cassette("example") do
        # no requests
      end
      """
    When I run `ruby allowed_by_default.rb`
    Then it should pass

  Scenario: Error raised if option is false and there are unused interactions
    Given a file named "disallowed_with_no_requests.rb" with:
      """ruby
      require 'vcr_config'

      VCR.use_cassette("example", :allow_unused_http_interactions => false) do
        # no requests
      end
      """
    When I run `ruby disallowed_with_no_requests.rb`
    Then it should fail with an error like:
      """
      There are unused HTTP interactions left in the cassette:
        - [get http://example.com/foo] => [200 "Hello"]
      """

  Scenario: No error raised if option is false and all interactions are used
    Given a file named "disallowed_with_all_requests.rb" with:
      """ruby
      require 'vcr_config'

      VCR.use_cassette("example", :allow_unused_http_interactions => false) do
        Net::HTTP.get_response(URI("http://example.com/foo"))
      end
      """
    When I run `ruby disallowed_with_all_requests.rb`
    Then it should pass

  Scenario: Does not silence other errors raised in `use_cassette` block
    Given a file named "does_not_silence_other_errors.rb" with:
      """ruby
      require 'vcr_config'

      VCR.use_cassette("example", :allow_unused_http_interactions => false) do
        raise "boom"
      end
      """
    When I run `ruby does_not_silence_other_errors.rb`
    Then it should fail with "boom"
     And the output should not contain "There are unused HTTP interactions"