2011-07-20 23 views
6

में विफल रहता है मेरे पास एक अजीब स्थिति है जिससे मैं व्यक्तिगत आरएसपीसी मॉडल स्पेक फ़ाइल चलाता हूं तो सभी उदाहरण हरे हैं, अगर मैं अपने पूरे spec/मॉडल फ़ोल्डर का परीक्षण करता हूं तो मेरे सभी उदाहरण हरे रंग के होते हैं। अगर मैं नियंत्रकों का परीक्षण करता हूं तो वे सभी हरे रंग से गुजरते हैं। अगर मैं पूरे सूट (आरएसपीईसी स्पेक के माध्यम से) का परीक्षण करता हूं तो मुझे असफलता मिलती है - अगर मैं नियंत्रक परीक्षण को पूरी तरह से हटा देता हूं तो सबकुछ हरा होता है। अब मैं उम्मीद कर रहा हूं कि यह पूरी तरह से आत्मनिर्भर है लेकिन मैं इसे समझ नहीं सकता।पूरे रुपेक सूट का परीक्षण

मैंने इसे नियंत्रक परीक्षणों में विशिष्ट उदाहरणों तक सीमित कर दिया है - जिससे मॉडल चश्मा में उदाहरण विफल हो जाते हैं।

उदाहरण के लिए। एक notes_controller_spec.rb में इस लाइन यह/अपने मॉडल में एक विफलता का कारण बनता account_spec.rb

Failure/Error: @account.all_notes.should have(2).notes 
ArgumentError: 
comparison of Note with Note failed 
./app/models/account.rb:293:in `sort' 

जहां लाइन 293 है वर्तमान

Note.any_instance.stubs(:valid?).returns(false) 

है अगर;

(self.notes + self.transactions.map(&:notes).flatten).sort {|a,b| a.created_at <=> b.created_at } 

मुझे यकीन है कि यह उन हथेली के क्षणों में से एक होने जा रहा है, इसलिए मेरे साथ सौम्य रहें!

+0

के बाद '' created_at' नोट्स में से एक के लिए nil', अपने तरह ब्लॉक एक 'Fixnum' के खिलाफ' nil' की तुलना की जाएगी जिसका अर्थ है हो सकता है, जो ब्लॉक को 'शून्य' वापस करने का कारण बनता है, जो आपके द्वारा देखे जा रहे 'ArgumentError' के प्रकार को उड़ा देगा।क्या आप सुनिश्चित हैं कि यह लाइन चलने पर डेटाबेस में आपके सभी उदाहरण सहेजे गए हैं? क्या यह संभव है कि प्रत्येक डेटाबेस से पहले आपका डेटाबेस खाली नहीं किया जा रहा है? –

+0

मुझे एक ही समस्या है। मुझे लगता है कि यह [इस आरएसपीईसी मुद्दे] से संबंधित हो सकता है (https://github.com/rspec/rspec-mocks/issues/54), हालांकि यह तय किया गया है कि यह तय किया गया है। –

+0

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

उत्तर

1

क्या आप पहले से कोई तारीख सेटअप कर रहे हैं: सभी ब्लॉक? ये लेनदेन नहीं हैं और परीक्षण प्रदूषण के मुद्दों का कारण बन सकते हैं।

इसके अलावा, मुझे लगता है कि अपने वाक्य रचना यहाँ बंद हो सकता है:

Note.any_instance.stubs(:valid?).returns(false) 

होना चाहिए:

Note.any_instance.stub(:valid?).and_return(false) 
0

मैं RSpec 3 और रेल 4.1 के साथ इसी तरह के मुद्दों का सामना करना पड़ा। जब भी मैं समस्याग्रस्त स्पेक फ़ाइल चलाता हूं, तो यह पूरा हो जाएगा, पूर्ण सूट चलाने के दौरान यह असफल हो जाएगा।

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

unless Rails.env.test? 
    Time.zone = "some timezone value here" 
end 
0

मुझे एक ही समस्या थी: व्यक्तिगत मॉडल चश्मा पास हुए। पूरे मॉडल सूट को चलाने पर, मेरे पास लगभग 30 असफलताएं थीं। मैंने जो किया वह सभी विफलताओं से पहले फ़ाइल को देख रहा था। वहां मैंने पाया कि मैं थ्रेड के अंदर चीजों को सेट कर रहा था और इस railscast में डिफ़ॉल्ट_स्कोप का उपयोग कर रहा था।

पहले खंड में, मैंने Company.current_id मुद्रित किया था। जैसा कि मैंने सोचा था, व्यक्तिगत रूप से चलते समय, Company.current_idnil था। सुइट चलाते समय, Company.current_id2 था। यह तब होता है जब आप डिफ़ॉल्ट स्कोप का उपयोग करते हैं। इसे ठीक करने के लिए, मैंने पहले खंड में Company.current_idnil पर सेट किया था।

पहले

describe Service, type: :model do 
    before do 
    end 
end 

describe Service, type: :model do 
    before do 
    Company.current_id = nil 
    end 
end 
संबंधित मुद्दे