rspec

2010-12-16 9 views
6

के साथ एक विशिष्ट यूआरएल कॉल करें मैं rspec में एक अनुरोध अनुरोध बनाना चाहता हूं।rspec

get :exec, {:query=>"bla", 
     :id => "something", 
     :user_id => "user" 
    } 

इस बनाता है एक यूआरएल की तरह: /user/query/something/_XXX_/exec?query=bla

मैं कैसे में कुछ इस तरह कर सकते हैं: /user/query/something/exec?query=bla

बात यह है कि मेरी नियंत्रक अनुरोध यह हो जाता है की जाँच करता है और यूआरएल की तरह लग रहे चाहिए rspec? (XXX को रूट.आरबी फ़ाइल में हार्ड-कोड किया गया है।)

+0

मैंने रूबी-ऑन-रेल टैग जोड़ने की स्वतंत्रता ली। अगर यह त्रुटि में था, तो हम इसे हटा देंगे। –

उत्तर

16

मुझे लगता है कि आप एक नियंत्रक स्पेक का जिक्र कर रहे हैं।

जब आप अपने उदाहरण में हैश में पास करते हैं, तो कुंजी आपके मार्गों में चर के विरुद्ध मेल खाई जाएगी। किसी भी कुंजी के लिए जो मार्ग से मेल नहीं खाता है, कुंजी/मान जोड़ी को क्वेरी स्ट्रिंग के रूप में जोड़ा जाएगा।

उदाहरण के लिए, यदि आप अपने विवरण में इस राशि:

get :exec, :query => 'foo', :id => '1', :user_id => 42 

और आप अपने मार्गों में इस राशि (रेल 3 शैली):

match '/exec/:user_id/:id' => 'whatever#exec' 

कल्पना तो कुंजी में विकल्प होगा/आपके द्वारा दिए गए मान जोड़े और निम्न पथ के साथ अनुरोध अनुकरण करें:

/exec/42/1?query=foo 

तो, अपने एस को तार करने के लिए अपने मार्गों के लिए चोटी, बस सुनिश्चित करें कि आप अपने spec अनुरोध में पैरामीटर के लिए अपने मार्गों में परिवर्तनीय नामों से मेल खाते हैं।

+0

मेरे प्रश्न की मुख्य समस्या "XXX" है - यह कहा जाता है- मार्ग फ़ाइल में हार्डकोड किया गया है (मैं ऐसा कर रहा हूं क्योंकि मुझे नामित मार्गों की आवश्यकता है) इसलिए कोई नहीं है: लैंग पैरामीटर, कुछ/XXX/exec? क्वेरी = bla और कुछ/YYY/exec? query = bla vaild urls हैं और उनमें से केवल एक (रूट फ़ाइल में पहला) rspecs के माध्यम से बनाया जा सकता है ... – Stephan

+1

मुझे नहीं पता कि आरएसपीसी इसे संभव बनाता है या नहीं किसी अन्य नाम पर एक विशेष नामित मार्ग चुनें। मेरा मानना ​​है कि यह हमेशा आपके पहले मैचों से मेल खाने वाला पहला मार्ग चुनता है। मुझे लगता है कि यह डिज़ाइन द्वारा है: आरएसपीसी चाहता है कि आप अलगाव में चीजों का परीक्षण करें, उदा। आपके नियंत्रक आपके मार्गों से अलग हैं। मुझे लगता है कि आप अनुरोध URL को वापस करने वाली विधि को दबाकर हमेशा इसे हैक कर सकते हैं। – rlkw1024