के साथ must_receive या stub_chain का उपयोग करना मैं रेल 3.0.4 और आरएसपीसी 2.5 का उपयोग करता हूं। मेरी नियंत्रकों में मैं स्कोप भारी नामित उपयोग करते हैं, उदाहरण के लिएरेल 3, आरएसपीसी 2.5: नामित स्कॉप्स
@collection = GuestbookEntry.nonreplies.bydate.inclusive.paginate( :page => params[:page], :conditions => { ... })
मेरे परीक्षण में, मैं इस तरह के एक प्रश्न, नहीं शब्दों की परिणाम उपहास करने के लिए सक्षम होना चाहते हैं। मुझे नहीं लगता कि यह समझ में आता है की तरह
GuestbookEntry.stub_chain(:nonreplies, :bydate, ...).and_return(...)
कुछ करने के लिए है, क्योंकि इस परीक्षण पल मैं नामित स्कोप को पुन: व्यवस्थित करने का फैसला असफल हो जायेगी है।
रेल 2.3 और RSpec 1.x के साथ, इस ठीक काम किया: मैं
GuestbookEntry.should_receive(:find).with(:all, :conditions => { ... })
लिख सकता है और इसके बाद के संस्करण कॉल पकड़ा जाएगा और सही ढंग से संभाला। हालांकि, रेल 3 के साथ, किसी कारण से यह अब और काम नहीं करता है।
क्यों? मैं नेस्टेड स्कॉप्स के परिणाम पर अपेक्षाओं या स्टब्स कैसे सेट करूं? चूंकि रेल 3 के एक्टिवमोडेल में सबकुछ एक नामित गुंजाइश है (एआरएल के लिए धन्यवाद), यह किसी भी तरह से संभव होना चाहिए, या परीक्षण वास्तव में बहुत भंगुर होंगे।
धन्यवाद!
अद्यतन:issue report on GitHub भी देखें।
फिर मैं चश्मा कैसे लिखूं जो यह सत्यापित करता है कि एक गुंजाइश वह करता है जो इसे करना है? मेरा विचार एकाधिक _simple_ scopes लिखना था जो _obvious_ हैं ताकि उनके अंदर लगभग कुछ भी "गलत हो" जा सके, और फिर उन्हें गठबंधन कर सकें, क्योंकि स्कोप स्पीप्स के लिए इतना कठिन है (वास्तविक डेटा के साथ वास्तविक डेटाबेस को पॉपुलटिंग और क्वेरी करने के बिना)। – Jens
मुझे लगता है कि आपको प्रत्येक "पूर्ण दायरा" का नमूना देना होगा, अन्यथा आप नहीं जान पाएंगे कि आपने उन्हें सही तरीके से संयोजित किया है। यहां तक कि यदि आप कल्पना करते हैं कि सही संयोजन किया गया था, तो आपको यह दिखाने के लिए एक समग्र कल्पना की आवश्यकता है कि समस्या स्वयं को हल करने का सही तरीका था। लेकिन यदि आप अपने दायरे में जटिल गुंजाइश डालते हैं, तो आपको कम से कम "शब्द" के आदेश के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि यह केवल एक ही स्थान पर किया जाता है। मुझे नहीं लगता कि आप डेटाबेस को पॉप्युलेट करने से दूर हो सकते हैं। व्यक्तिगत रूप से, मुझे मॉडल विधियों को नकल करने के बजाय वास्तविक डेटा सेट अप करने के लिए कारखानों का उपयोग करना आसान (और "सुरक्षित") लगता है। –