Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Name of current example/group in rspec hook

I'm adding an rspec hook that will allow me to switch on vcr and use the name of the current example as the cassette name.

it "should have collaborators", :vcr => :once do
  # web interactions
end

config.around(:each, :vcr => :once) do |example|
  VCR.use_cassette(example.name, :record => :once) do
    example.call
  end
end

trouble is I don't know how to get the name of the current example (example.name doesn't work).

like image 921
opsb Avatar asked Mar 06 '11 19:03

opsb


2 Answers

RSpec defines a metadata method that returns a hash with some useful information about the example. You might try:

example.metadata[:full_description]

which should return the group(s) and example name, concatenated into one string.

like image 80
zetetic Avatar answered Oct 18 '22 04:10

zetetic


This seems a bit fiddly but it does the job

  config.before(:each, :vcr => :once) do
    group_descriptions = self.example.example_group.ancestors.map(&:description)
    spec_name = [*group_descriptions.reverse, self.example.description].join("/")
    VCR.insert_cassette(spec_name, :record => :once)
  end

  config.after(:each, :vcr => :once) do
    VCR.eject_cassette
  end
like image 28
opsb Avatar answered Oct 18 '22 03:10

opsb