2011-03-06 11 views
8

में वर्तमान उदाहरण/समूह का नाम मैं एक आरएसपीईसी हुक जोड़ रहा हूं जो मुझे वीसीआर पर स्विच करने और वर्तमान उदाहरण के नाम को कैसेट नाम के रूप में उपयोग करने की अनुमति देगा।आरएसपीईसी हुक

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 

परेशानी मुझे नहीं पता कि वर्तमान उदाहरण का नाम कैसे प्राप्त करें (example.name काम नहीं करता है)।

उत्तर

13

RSpec एक metadata विधि है कि उदाहरण के बारे में कुछ उपयोगी जानकारी के साथ एक हैश रिटर्न को परिभाषित करता है करता है। आप कोशिश कर सकते हैं:

example.metadata[:full_description] 

जो समूह (ओं) और उदाहरण नाम को वापस करना चाहिए, जो एक स्ट्रिंग में सम्मिलित है।

+0

हां यह करने का यह एक बेहतर तरीका है। जैसा कि यह पता चला है कि मेरा समाधान मेरे लिए बेहतर काम करता है (मुझे विवरण के लिए निर्देशिका संरचना पसंद है) लेकिन यह मूल प्रश्न के लिए सबसे अच्छा जवाब है। – opsb

1

इसमें कुछ समय लगता है, लेकिन बारीकियों यह काम

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