2011-01-26 10 views
6

मेरे पास एक रेल 3 एकीकरण परीक्षण है जो मेरे मार्गों का परीक्षण करता है।मैं कैसे दावा कर सकता हूं कि रेल एकीकरण परीक्षण में कोई मार्ग मिलान नहीं है?

assert_routing(
    "/#{@category.url.path}/#{@foo.url.path}", 
    { :controller => 'foo', :action => 'show', :category => @category.to_param, :foo => @foo.to_param } 
) 

मैं भी एक मामले में जहां कोई मार्गों से मेल खाना चाहिए परीक्षण करना चाहते हैं: यह इस तरह के रूप परीक्षण में शामिल है। जाहिर है, इस मामले में परीक्षण पीढ़ी का कोई मतलब नहीं है, इसलिए मुझे केवल assert_recognizes के विपरीत की आवश्यकता है। (अब मैं इसके बारे में लगता है कि जो वास्तव में इतना भयानक नहीं है,) एक assert_raises ब्लॉक में

assert_not_recognized('/adfhkljkdhasjklhjkldfahsjkhdf') 

कोई भी विचार, लपेटकर assert_recognizes की कमी: मैं कुछ इस तरह करने में सक्षम होना चाहते हैं?

उत्तर

9

मैं यह कर समाप्त हो गया:

def test_no_routes_match_when_neither_foo_nor_bar_exist 
    assert_raises(ActionController::RoutingError) do 
     assert_recognizes({}, '/category/this-is-neither-a-foo-nor-a-bar') 
    end 
    end 

थोड़ा मूर्खतापूर्ण है, लेकिन यह काम किया जाता है।

ध्यान दें कि यह रेल के साथ काम नहीं करता है 4. See the answer below रेल 4 समाधान के लिए।

+0

मुझे नहीं लगता कि यह सही जवाब है, कम से कम रेल 4. के रूप में करते हैं "(यदि या तो 1 assert_recognizes {} ..." असफल हो जायेगी), या 2) यदि यह पहचाना जाता है लेकिन {} के अलावा कुछ और (जो हमेशा मामला होना चाहिए, क्योंकि एक मान्यता प्राप्त मार्ग में निम्न शामिल होंगे: क्रिया और नियंत्रक कुंजी)। –

+0

मुझे वास्तव में याद नहीं है कि जब मैं इस मुद्दे पर था, तो मैं किस रेल संस्करण का उपयोग कर रहा था। यह दो साल पहले था। :) –

+0

मैं पुष्टि कर सकता हूं कि यह रेल 3 (3.2.16) में काम करता है, लेकिन रेल 4 (4.0.2) में विफल रहता है। मैं अलग जवाब के रूप में एक और संस्करण जोड़ दूंगा। – user569825

-1

क्या आपने method_missing(selector, *args, &block) को आजमाया है?

def test_no_routes_match_when_neither_foo_nor_bar_exist 
    assert_raises(ActionController::UrlGenerationError) do 
    get '/category/this-is-neither-a-foo-nor-a-bar' 
    end 
end 
7

UrlGenerationError अपवाद पर जोर देते हुए द्वारा रेल 4 में इस जाँच के लिए एक ऐसी ही तरीका नहीं है। इसके बजाय आपको एक त्रुटि मिलेगी, लेकिन फिर आपको वह सुराग मिला जो आप खोज रहे थे। दिए गए पथ सब पर मान्यता प्राप्त नहीं है

test "No routes match when neither_foo_nor_ bar exist" do 
    begin 
    assert_not(Rails.application.routes.recognize_path(
     'category/this-is-neither-a-foo-nor-a-bar')) 
    rescue ActionController::RoutingError => error 
    assert error.message.start_with? "No route matches" 
    end 
end 
2

#recognize_path बुला कर आप अभ्यस्त एक झूठी प्राप्त करते हैं: परिभाषित किया जाता है Here

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