2009-11-19 12 views
13

को देखते हुए मैं एक नामित मार्ग है:नामित मार्गों का परीक्षण करने के लिए rspec का उपयोग कैसे करें?

map.some_route '/some_routes/:id', :controller => 'some', :action => 'other' 

कैसे मुझे लगता है कि नामित मार्ग के लिए परीक्षण करने के लिए मार्ग कल्पना फ़ाइल 'कल्पना/मार्ग/some_routing_spec.rb' प्रयोग करते हैं?

मैं "का वर्णन SomeRouteController" ब्लॉक के बाद यह कोशिश की है और यह काम नहीं करता, मैं 'अपरिभाषित विधि "सहायक" मिलती है:

describe SomeRouteHelper, 'some routes named routes' do 
    it 'should recognize some_route' do 
    helper.some_route_path(23).should == '/some_routes/23' 
    end 
end 

उत्तर

13

यदि यह नियंत्रक स्पेक में है, तो आप सीधे रूटिंग विधि को कॉल कर सकते हैं, कोई सहायक आवश्यक नहीं है।

describe SomeController do 
    it 'should recognize ma routes!' do 
    thing_path(23).should == '/things/23' 
    end 
end 
+1

धन्यवाद, मैंने यह भी कोशिश की, बस किसी और को यह कहना चाहता था कि मैं पागल नहीं था, हे ... बाहर निकलता है मैंने नेस्टेड संसाधनों का उपयोग किया था, जिसके लिए parent_child_path (23) प्रारूप बच्चे_पथ (23) के विपरीत है प्रारूप। – btelles

+0

आरएसपीईसी में चीजें तेजी से बदलती हैं - डेलिमिम्स्की मार्ग_to मैचर का उपयोग करने का सुझाव देती है: मार्ग_to मैचर निर्दिष्ट करता है कि एक अनुरोध (क्रिया + uri) मार्ग योग्य है। मानक रीस्टफुल मार्गों के अलावा अन्य मार्गों को निर्दिष्ट करते समय यह सबसे मूल्यवान है। https://www.relishapp.com/rspec/rspec-rails/v/2-4/docs/routing-specs/route-to-matcher (स्कार्वर के इस प्रश्न का उत्तर भी देखें) –

2

आप assert_routing के साथ अपने नियंत्रक चश्मा में यह कर सकते हैं विधि, इसलिए जैसे:

describe UsersController do 
    it "should recognize a specific users#show route" do 
    assert_routing("https://stackoverflow.com/users/23", {:controller => "users", :action => "show", :id => 23}) 
    end 
end 

अधिक प्रलेखन here है।

+0

हाँ /spec/routing/thingz_controller_spec.rb, यह नियमित मार्ग पहचान के लिए है, हालांकि मैं नामित मार्ग चश्मे की तलाश में था। हालांकि धन्यवाद! – btelles

12

RSpec-रेल में 2.7+ आप एक spec/routing निर्देशिका बनाने और वहाँ में अपने मार्ग चश्मा डाल सकते हैं। अधिक जानकारी के लिए rspec-rails docs देखें।

6

वहाँ यह भी के लिए एक अच्छी चाहिये मिलान है: चाहिये प्रयोग पर

it { should route(:get, "https://stackoverflow.com/users/23").to(:action => "show", :id => 23) 

अधिक जानकारी rspec साथ matchers:

https://github.com/thoughtbot/shoulda-matchers

1

इस तरह मैं RSpec2, चाहिये का उपयोग कर चश्मा लिखते हैं, और कैपिबरा। आप /spec/routing/thingz_routing_spec.rb में # {Rails.root} इस उदाहरण फ़ाइल की बचत होगी या मेरी प्राथमिकता # {Rails.root}

require "spec_helper" 

describe ThingzController do 
    describe "routing" do 
    it "routes to #index" do 
     get("/thingz").should route_to("thingz#index") 
    end 
    end 
end 
+0

वैकल्पिक वाक्यविन्यास: ' मार्ग (: प्राप्त करें, '/thingz').to(नियंत्रक:' चीज़ज़ ', क्रिया:' अनुक्रमणिका ') ' – scarver2

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