File: dynamic_erb.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,063 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: Dynamic ERB cassettes

  By default, cassettes are static: the exact response that was received
  when the cassette was recorded will be replayed for all future requests.
  Usually, this is fine, but in some cases you need something more dynamic.
  You can use ERB for this.

  To enable ERB evaluation of a cassette, pass the `:erb => true` option
  to a cassette.  If you want to pass variables to the cassette, you can
  pass the names and values of the variables in a hash (`:erb => { ... }`).

  Scenario: Enable dynamic ERB cassette evalutation using :erb => true
    Given a previously recorded cassette file "cassettes/dynamic.yml" with:
      """
      ---
      http_interactions:
      - request:
          method: get
          uri: http://example.com/foo?a=<%= 'b' * 3 %>
          body:
            encoding: UTF-8
            string: ''
          headers: {}
        response:
          status:
            code: 200
            message: OK
          headers:
            Content-Type:
            - text/html;charset=utf-8
            Content-Length:
            - '9'
          body:
            encoding: UTF-8
            string: Hello <%= 'bar'.next %>
          http_version: '1.1'
        recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
      recorded_with: VCR 2.0.0
      """
    And a file named "dynamic_erb_example.rb" with:
      """ruby
      require 'vcr'

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

      VCR.use_cassette('dynamic', :erb => true) do
        response = Net::HTTP.get_response('example.com', '/foo?a=bbb')
        puts "Response: #{response.body}"
      end
      """
    When I run `ruby dynamic_erb_example.rb`
    Then it should pass with "Response: Hello bas"

  Scenario: Pass arguments to the ERB using :erb => { ... }
    Given a previously recorded cassette file "cassettes/dynamic.yml" with:
      """
      ---
      http_interactions:
      - request:
          method: get
          uri: http://example.com/foo?a=<%= arg1 %>
          body:
            encoding: UTF-8
            string: ''
          headers: {}
        response:
          status:
            code: 200
            message: OK
          headers:
            Content-Type:
            - text/html;charset=utf-8
            Content-Length:
            - '9'
          body:
            encoding: UTF-8
            string: Hello <%= arg2 %>
          http_version: '1.1'
        recorded_at: Tue, 01 Nov 2011 04:58:44 GMT
      recorded_with: VCR 2.0.0
      """
    And a file named "dynamic_erb_example.rb" with:
      """ruby
      require 'vcr'

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

      VCR.use_cassette('dynamic', :erb => { :arg1 => 7, :arg2 => 'baz' }) do
        response = Net::HTTP.get_response('example.com', '/foo?a=7')
        puts "Response: #{response.body}"
      end
      """
    When I run `ruby dynamic_erb_example.rb`
    Then it should pass with "Response: Hello baz"