2011-07-12 17 views
8

में स्ट्रिंग के रूप में प्रदान किया गया यूआरएल या पथ प्राप्त करें, एक नियंत्रक के लिए जो साइडबार के व्यवहार को निर्धारित करता है, मुझे कई यूआरएल कॉल करने की आवश्यकता है; साइडबार उस पृष्ठ के आधार पर (ए.ओ.) बदल जाएगा जिस पर यह प्रतीत होता है।एक आरएसपीईसी परीक्षण

describe SidebarController do 
    before(:each) do 
    @sidebar = SidebarController.new 
    end 
    it 'should return :jobseekers for root_path' do 
    get(root_url) 
    @sidebar.section(root_path).should eq :jobseekers 
    end 
end 

लेकिन यह ActionController::RoutingError: No route matches {:controller=>"sidebar", :action=>"http://test.host/"}

के साथ विफल कर सकते हैं मैं get एक यूआरएल या स्ट्रिंग के रूप में पथ? क्या request. डेटा सेट करने के लिए कोई स्मार्ट तरीका है, इसके बजाय इसे प्राप्त करना?

उत्तर

15

क्या मुझे स्ट्रिंग के रूप में यूआरएल या पथ मिल सकता है?

नियंत्रक परीक्षण में नहीं। परीक्षण नियंत्रक वास्तव में एक यूआरएल संसाधित नहीं कर रहा है, यह 5 सहायक अनुरोध प्रकारों में से एक का उपयोग करके परीक्षण स्थापित कर रहा है (प्राप्त करें, पोस्ट करें, डालें, सिर, हटाएं) और फिर उपयुक्त नियंत्रक कार्रवाई को कॉल करें। Guide to Testing Rails Applications देखें।

जो आप खोज रहे हैं वह एकीकरण परीक्षण है, या आरएसपीईसी शर्तों में "request spec" है।

7

यहाँ एक समाधान है ... इस स्थिति में आप जरूरी नहीं कि सबसे अच्छा तरीका है करने के लिए ... चाहता था, लेकिन एक तरह से .. इस रेल 3.2 पर काम करता है ...

module ActionController::TestCase::Behavior 
    #just parse the url and then call the regular get method 
    def get_path(path) 
    parsed_params = Rails.application.routes.recognize_path path 
    controller = parsed_params.delete(:controller) 
    action = parsed_params.delete(:action) 
    get(action, parsed_params) 
    end 
end 
संबंधित मुद्दे