वैरिएबल प्रारंभ करने के लिए rspec में let()
का उपयोग करने के लिए बहुत समर्थन लगता है। इसके बजाय इंस्टेंस वैरिएबल (यानी @name
) का उपयोग करने के लिए कुछ मामले क्या हैं?उदाहरण चर का उपयोग करते समय चलो() का उपयोग करने से अधिक फायदेमंद है?
उत्तर
मैं हमेशा कारणों की एक जोड़ी के लिए एक उदाहरण चर के लिए करते हैं पसंद करते हैं:
उदाहरण चर अस्तित्व में आने के लिए जब वे संदर्भित हो जो का मतलब है कि आप उदाहरण में किसी भी गलती चर वर्तनी तो करते हैं यह निश्चित रूप से आपको कुछ मुद्दों पर ले जाएगा क्योंकि एक नया इंस्टेंस वैरिएबल शून्य के लिए शुरू किया गया है। लेकिन यदि आप गलत वर्तनी करते हैं तो आपको नाम त्रुटि प्राप्त होगी।
इसके अलावा आप ब्लॉक, उससे पहले ब्लॉक हर बार निष्पादित किया जाएगा एक कल्पना भी चल पाएंगे कि अगर कल्पना न उन उदाहरण चर आप प्रारंभ की है का उपयोग जिसका मतलब है कि पहले में उदाहरण चर आरंभ कर दिया जाएगा। नीचे दिया गया उदाहरण;
before do @user = Factory :user @movie = Factory :movie end it "should have user" do @user.should eq User.first end it "should have movie" do @movie.should eq Movie.first end
हालांकि सभी चश्मा ठीक चलाने, लेकिन पहले कल्पना और दूसरे में @user
का कोई उपयोग नहीं में @movie
की वहाँ का उपयोग नहीं कर रहा है।
आप बैंग के साथ भी उपयोग कर सकते हैं "!" let!
, let
आलसी मूल्यांकन किया गया है और यदि आप इसे कॉल नहीं करते हैं तो कभी भी तत्काल नहीं किया जाएगा, let
का उपयोग ज्ञात सहायक को परिभाषित करने के लिए करें, जबकि let!
प्रत्येक विधि कॉल से पहले बलपूर्वक मूल्यांकन किया जाता है।
मैंने इस सवाल का समर्थन किया है, लेकिन अंत में मैं खुद से सवाल का जवाब दे रहा हूं।
मतभेद
let
विधि का वर्णन करने के पहले जब इस्तेमाल किया यह चर को प्रारंभ नहीं होता है जब तक यह परीक्षण में संदर्भित है - जो बनाता है यह @instance variables
से अलग जो शुरू से ही प्रारंभ कर रहे हैं।
आम तौर पर कोई बड़ा अंतर नहीं होता है। @instance variables
का उपयोग करें जब आप यह सुनिश्चित करना चाहते हैं कि let
ऑब्जेक्ट प्रारंभ किया गया है। लेकिन दूसरी ओर यह let!
के साथ भी किया जा सकता है, इसलिए @instance variable
का उपयोग करने के लिए कोई स्पष्ट कारण नहीं है।
निष्कर्ष करने के लिए, मेरे लिए, वहाँ स्पष्टlet
से अधिक @instance variable
उपयोग करने के लिए कारण नहीं है, लेकिन वहाँ का उपयोग करने के @instance variables
let!
से अधिक
@instance variables
लोड करने के लिए, और उन्हें का उपयोग करके अधिक समय लगता है कोई स्पष्ट कारण है, कर सकता है कोड में अवांछित जटिलता जो let
या let!
आप इन दो जवाब पर एक नज़र ले जा सकते हैं का उपयोग करके बचा जा सकता है के लिए नेतृत्व, हो सकता है यह आप कुछ और जानकारी दे देंगे:
सभी बिंदुओं पर, `let` उदाहरण चर के लिए बेहतर है और हमेशा उदाहरण चर की तुलना में अधिक फायदेमंद है:RSpec: What is the difference between let and a before block?
हो सकता है कि वह इस तरह कहने के लिए करना चाहता था। –