Module: VCR::RSpec::Metadata

Extended by:
Metadata
Included in:
Metadata
Defined in:
lib/vcr/test_frameworks/rspec.rb

Instance Method Summary collapse

Instance Method Details

#configure!Object


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
# File 'lib/vcr/test_frameworks/rspec.rb', line 8

def configure!
  ::RSpec.configure do |config|
    vcr_cassette_name_for = lambda do ||
      description = if [:description].empty?
                      # we have an "it { is_expected.to be something }" block
                      [:scoped_id]
                    else
                      [:description]
                    end
      example_group = if .key?(:example_group)
                        [:example_group]
                      else
                        [:parent_example_group]
                      end

      if example_group
        [vcr_cassette_name_for[example_group], description].join('/')
      else
        description
      end
    end

    when_tagged_with_vcr = { :vcr => lambda { |v| !!v } }

    config.before(:each, when_tagged_with_vcr) do |ex|
      example = ex.respond_to?(:metadata) ? ex : ex.example

      cassette_name = nil
      options = example.[:vcr]
      options = case options
                when Hash #=> vcr: { cassette_name: 'foo' }
                  options.dup
                when String #=> vcr: 'bar'
                  cassette_name = options.dup
                  {}
                else #=> :vcr or vcr: true
                  {}
                end

      cassette_name ||= options.delete(:cassette_name) ||
                      vcr_cassette_name_for[example.]
      VCR.insert_cassette(cassette_name, options)
    end

    config.after(:each, when_tagged_with_vcr) do |ex|
      example = ex.respond_to?(:metadata) ? ex : ex.example
      VCR.eject_cassette(:skip_no_unused_interactions_assertion => !!example.exception)
    end
  end
end