के साथ डीआरवाई नियंत्रक चश्मा मैं वर्तमान में प्रति नियंत्रक चश्मा DRY और संक्षेप में नीचे एक उदाहरण के लिए एक प्रयास करने के लिए कोशिश कर रहा हूँ। मैं कुछ कठिनाइयों में विशेष रूप से कह रहा हूं कि विभिन्न किनारे के मामलों से मेल खाने के लिए घोंसला वाली संरचना के भीतर वास्तविक नियंत्रक अनुरोध कॉल कहां रखा जाए।आरएसपीईसी
यहाँ एक उदाहरण है, समस्या का प्रदर्शन करने के लिए सरल है:
describe MyController do
let(:item) { Factory(:item) }
subject { response }
describe "GET #show" do
before(:each) do
get :show
end
context "published item" do
it { should redirect_to(success_url) }
end
context "unpublished item" do
before(:each) do
item.update_attribute(published: false)
end
it { should redirect_to(error_url) }
end
end
end
जाहिर है यह एक काल्पनिक उदाहरण है, लेकिन यह दिखाता है मैं क्या करना चाहते हैं और क्या काम नहीं कर रहा है। मुख्य रूप से, "अप्रकाशित" संदर्भ के तहत before
ब्लॉक समस्या है। क्या होता है सेटअप सेटअप में किए गए परिवर्तन वास्तव में get
संदर्भों के कारण कॉल के कारण कॉल करते हैं, इसलिए उस संदर्भ में उदाहरण वास्तव में प्रारंभिक परिदृश्य के साथ काम कर रहा है, जिसका इरादा मैं चाहता हूं।
मुझे समझ में आता है कि ऐसा क्यों होता है और घोंसला का संदर्भ कैसे होता है। मुझे लगता है कि मैं क्या तरह चाहते है की किसी तरह RSpec बताने के लिए मैं इसे किसी दिए गए संदर्भ में किसी भी दावे से पहले सही किसी भी बाद before
हुक अभी तक सही चलाना चाहते हैं क्या है। यह नियंत्रक चश्मा के लिए एकदम सही होगा। मैं अपने नियंत्रक चश्मा में घोंसले का लाभ लेना चाहता हूं ताकि get
कॉल को स्कैटर किए बिना किनारे के मामलों में धीरे-धीरे बढ़ोतरी हो या मेरे it
सम्मिलनों में से प्रत्येक में do_get
सहायक को कॉल करें। यह विशेष रूप से किसी भी कस्टम it_should
मैक्रोज़ के साथ सिंक में रहने के लिए परेशान हो जाएगा जो मैं उपयोग कर रहा हूं।
क्या आरएसपीईसी में वर्तमान में कुछ भी ऐसा करने के लिए कुछ है? क्या कोई चाल है जो मैं करीब आने के लिए उपयोग कर सकता हूं? ऐसा लगता है कि मैंने अपने नियंत्रक चश्मा लिखने वाले बहुत से लोगों को देखा है; जो मैंने पाया है, लोगों ने मूल रूप से do_get
सहायता करने वालों को हर दावे से पहले बुलाया है। क्या कोई बेहतर तरीका है? आप के लिए
अच्छा बिंदु। चश्मा को स्पष्ट रखने के लिए अतिरिक्त क्रियात्मकता उपयोगी हो सकती है, भले ही 'get' कॉल अभी भी दोहराया गया हो। फिर भी, यह कंट्रोलर चश्मे की तरह लगता है, जिसमें एक आरईएसटी कार्रवाई के जवाब में speccing का एक बहुत ही विशिष्ट उपयोग मामला है, किसी भी तरह से इस तरह के पुनरावृत्ति को कम कर सकता है। –
क्रिस - मैं मानता हूं कि कुछ प्रकार का शॉर्टकट अच्छा होगा और मैं इस विचार के लिए खुला हूं, लेकिन मैंने अभी तक एक ऐसा देखा है जो मुझे लगता है कि स्पष्टता का उचित स्तर है। यदि आपके पास कोई विचार है, तो हर तरह से कृपया https://github.com/rspec/rspec-rails/issues पर एक सुविधा अनुरोध सबमिट करें। –