2011-11-25 1 views
15

में आरएसपीसी परीक्षणों के बीच कक्षा चर को कैसे साफ़ कर सकता हूं मेरे पास निम्न श्रेणी है: मैं यह सुनिश्चित करना चाहता हूं कि कक्षा यूआरएल केवल सभी उदाहरणों के लिए सेट हो।मैं रूबी

class DataFactory 
    @@url = nil 

    def initialize() 
begin 
    if @@url.nil? 
     Rails.logger.debug "Setting url" 
     @@url = MY_CONFIG["my value"] 
    end 
rescue Exception 
    raise DataFactoryError, "Error!" 
end 
    end 
end 

मैं दो परीक्षणों है:

it "should log a message" do 
    APP_CONFIG = {"my value" => "test"} 
    Rails.stub(:logger).and_return(logger_mock) 
    logger_mock.should_receive(:debug).with "Setting url" 

    t = DataFactory.new 
    t = nil 
end 

it "should throw an exception" do 
    APP_CONFIG = nil 

    expect { 
    DataFactory.new 
    }.to raise_error(DataFactoryError, /Error!/) 
end 

समस्या दूसरे टेस्ट @@ यूआरएल वर्ग चर के रूप में एक अपवाद कभी नहीं फेंकता अभी भी पहले टेस्ट जब दूसरे टेस्ट रन से सेट कर दिया जाता है। भले ही मैंने पहले टेस्ट कचरा संग्रह के अंत में शून्य के उदाहरण को देखा है, दूसरे टेस्ट रन से पहले स्मृति को मंजूरी नहीं दी गई है:

कोई भी विचार बहुत अच्छा होगा! मैंने सुना है कि आप संभवतः कक्षा.न्यू का उपयोग कर सकते हैं लेकिन मुझे यकीन नहीं है कि इस बारे में कैसे जाना है।

+0

नहीं वास्तव में आपकी समस्या से संबंधित, लेकिन: रूबी में @@ कक्षा चर का उपयोग कभी नहीं करें। इसके बजाय @class इंस्टेंस चर का प्रयोग करें। वे कहीं अधिक अनुमानित व्यवहार करते हैं। ** NameError: अप्रारंभीकृत वर्ग चर @@ वस्तु में यूआरएल ** मैं का उपयोग कर काम करने के लिए मिल गया: 'से पहले (: प्रत्येक) DataFactory.class_eval {class_variable_set कर –

उत्तर

19
describe DataFactory 
    before(:each) { DataFactory.class_variable_set :@@url, nil } 
    ... 
end 
+1

जब मैं इस भाग गया मैं निम्नलिखित त्रुटि मिली: @@ url, nil} end' _ मैं जेआरबी 1.6.5 का उपयोग कर रहा हूं जो मुझे लगता है कि रुबी 1.8.9 का उपयोग करता है और class_variable_set इस संस्करण में निजी हो सकता है इसलिए मुझे class_eval_ का उपयोग करना था: [http: //www.khelll .com/ब्लॉग/गहरे लाल रंग का/गहरे लाल रंग का प्रतिबिंब-2 /] –

3

यहाँ स्वीकार किए जाते हैं जवाब है, जो, जबकि अपनी विशिष्ट उदाहरण का समाधान नहीं होता है, मैं इसे एक ही नस में एक प्रश्न के साथ कुछ लोगों की मदद कर सकते हैं आशा करती हूं कि करने के लिए एक विकल्प है। प्रश्न में वर्ग एक डिफ़ॉल्ट मान निर्दिष्ट नहीं करता है, और सेट तक अपरिभाषित रहता है, यह काम करने के लिए लगता है: मेरे लिए

describe DataFactory 
    before(:each) do 
    DataFactory.remove_class_variable :@@url if DataFactory.class_variable_defined? :@@url 
    end 
    ... 
end 

वर्क्स एक वर्ग के साथ साथ कुछ अधिक की तरह:

def initialize 
    @@url ||= MY_CONFIG["my value"] 
    ... 
end