module VCR::RSpec::Macros

Contains macro methods to assist with VCR usage. These methods are intended to be used directly in an RSpec example group. To make these available in your RSpec example groups, extend the module in an individual example group, or configure RSpec to extend the module in all example groups.

@example

RSpec.configure do |c|
  c.extend VCR::RSpec::Macros
end

Public Instance Methods

use_vcr_cassette(*args) click to toggle source

Sets up a `before` and `after` hook that will insert and eject a cassette, respectively.

@example

describe "Some API Client" do
  use_vcr_cassette "some_api", :record => :new_episodes
end

@param [(optional) String] name the cassette name; it will be inferred by the example

group descriptions if not given.

@param [(optional) Hash] options the cassette options

# File lib/vcr/test_frameworks/rspec.rb, line 28
def use_vcr_cassette(*args)
  options = args.last.is_a?(Hash) ? args.pop : {}
  name    = args.first || infer_cassette_name

  before(:each) do
    VCR.insert_cassette(name, options)
  end

  after(:each) do
    VCR.eject_cassette
  end
end

Private Instance Methods

infer_cassette_name() click to toggle source
# File lib/vcr/test_frameworks/rspec.rb, line 43
def infer_cassette_name
  # RSpec 1 exposes #description_parts; use that if its available
  return description_parts.join("/") if respond_to?(:description_parts)

  # Otherwise use RSpec 2 metadata...
  group_descriptions = []
  klass = self

  while klass.respond_to?(:metadata) && klass.metadata
    group_descriptions << klass.metadata[:example_group][:description]
    klass = klass.superclass
  end

  group_descriptions.compact.reverse.join('/')
end