2011-08-28 6 views
7

काफी सरल समस्या करते हैं (मैं सोचा होगा), लेकिन मुझे कुछ समस्याएं आ रही हैं:रेल RSpec रूटिंग: में कार्रवाई का परीक्षण: को छोड़कर मार्ग नहीं

रेल में 3.1.0.rc6/RSpec 2.6.0 , मैं अपने 'उत्पाद' संसाधन के मार्ग का परीक्षण करने के कोशिश कर रहा हूँ, इस तरह से कराई:

resources :products, :except => [:edit, :update] 

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

Failure/Error: get("/products/1/edit").should_not route_to("products#edit", :id => "1") ActionController::RoutingError: No route matches "/products/1/edit"

किसी भी विचार यहाँ क्या हो रहा है मिलता है,

it "does not route to #edit" do 
    lambda { get("/products/1/edit") }.should raise_error 
end 

Failure/Error: lambda { get("/products/1/edit") }.should raise_error expected Exception but nothing was raised # ./spec/routing/products_routing_spec.rb:11:in `block (3 levels) in '

... और फिर भी जब मैं

it "does not route to #edit" do 
    get("/products/1/edit").should_not route_to("products#edit", :id => "1") 
end 

चलाएँ: यहाँ मैं क्या कोशिश कर रहा हूँ है? मुझे लगता है कि यह बहुत आसान होना चाहिए, लेकिन मुझे इसे समझने की प्रतीत नहीं हो रही है।

उत्तर

9

मुझे नहीं पता कि लैम्ब्डा क्यों विफल रहेगा, लेकिन मुझे नहीं लगता कि आरएसपीसी-रेल डीएसएल का उपयोग इस तरह किया जाना है। क्या आपने ऐसा कुछ करने की कोशिश की है?

{ :get => "/products/1/edit" }.should_not be_routable 

http://relishapp.com/rspec/rspec-rails/docs/routing-specs/be-routable-matcher

तो आप निर्दिष्ट कर सकते नहीं क्या यह करने के लिए मार्ग नहीं करता है, लेकिन आपको लगता है कि यह कराई नहीं प्राप्त करता है निर्दिष्ट कर सकते हैं।

+0

हमारे पास एक विजेता है। अजीब - मुझे लगता है कि रेल 2 "लम्बाई त्रुटि" को संभालने के लिए प्रयोग किया जाता है, लेकिन स्पष्ट रूप से 3.1 नहीं। Be_routable विधि के बारे में भी पता नहीं था - बहुत धन्यवाद। – PlankTon

+1

बहुत उपयोगी! बस एक त्वरित नोट: उपरोक्त परीक्षण /spec/routing/xxxx.rb में होना चाहिए या यह किसी त्रुटि के साथ विफल हो जाएगा। उदाहरण के लिए, आप इसे /spec/requests/xxxx.rb में नहीं कर सकते हैं –

0

क्या आपके पास फ़ॉलबैक मार्ग है? क्योंकि इससे समझाया जाएगा कि कोई त्रुटि क्यों नहीं फेंक दी गई है, लेकिन वास्तव में route_to("products#edit", :id => 1) का मूल्यांकन करने की कोशिश करनी होगी, क्योंकि मार्ग मौजूद नहीं है।

+0

अच्छा विचार, लेकिन नहीं। यह एक नंगे परियोजना है - शाब्दिक रूप से आज दोपहर शुरू हुई। कोई रीडायरेक्ट सेट अप नहीं हुआ - फिलहाल यह नंगे मचान वाले संसाधन, आरएसपीईसी और ककड़ी है। – PlankTon

संबंधित मुद्दे