2010-12-22 12 views
7

मैं अपने रेल परियोजना में Omniauth का उपयोग कर रहा हूं, और मैं एक "/ लॉगिन" मार्ग के पीछे "/ auth/facebook" छिपाना चाहता हूं।रेल: मैं एक ऐसे मार्ग के लिए एक स्पेक कैसे लिखूं जो रीडायरेक्ट करता है?

वास्तव में, मैं एक मार्ग लिखा है:

match "/login", :to => redirect("/auth/facebook"), :as => :login 

और यह वास्तव में काम करता है, अर्थात एक लिंक login_path को /auth/facebook पर रीडायरेक्ट करेगा।

हालांकि, मैं इस मार्ग (विशेष रूप से, रीडायरेक्ट) का परीक्षण करने के लिए एक (आरएसपीईसी) spec कैसे लिख सकता हूं?

ध्यान दें कि /login एक वास्तविक क्रिया नहीं है और न ही एप्लिकेशन में परिभाषित विधि है।

अग्रिम धन्यवाद!

+0

[उदाहरण Rspec मार्गों] (https://cbabhusal.wordpress.com/2015/12/15/rails-rspec-examples-of-routing-specs/# अधिक -1623) – illusionist

उत्तर

12

क्योंकि आप अपने वातावरण के बारे में कोई विस्तार नहीं प्रदान की थी, तो निम्न उदाहरण मानता है आप rspec 2.x और rspec- उपयोग कर रहे हैं की जाँच करनी चाहिए रेल के साथ रेल 3.

# rspec/requests/redirects_spec.rb 
describe "Redirects" do 
    describe "GET login" do 
    before(:each) do 
     get "/login" 
    end 

    it "redirects to /auth/facebook" do 
     response.code.should == "302" 
     response.location.should == "/auth/facebook" 
    end 
    end 
end 

अधिक जानकारी के लिए rspec-rails के अनुरोध स्पेक्स अनुभाग पढ़ें।

+0

यह काम करता है! धन्यवाद! जैसा कि आपने उल्लेख किया है, # spec/request/redirects में इस spec को परिभाषित करने की कुंजी कुंजी है। पहले, मैं इसे एप्लिकेशन कंट्रोलरस्पेक में कर रहा था (जिसके परिणामस्वरूप त्रुटि "/ लॉगिन" एप्लिकेशन कंट्रोलर में नहीं मिल सकती है), या "*। Should path_to blah" के साथ एक spec/routing चश्मे में से एक में (जिसने शिकायत की है कि मार्ग मौजूद नहीं है)। – winstonyw

+0

और हाँ, मैं रेल 3 के साथ rspec (-rails) 2.x का उपयोग कर रहा हूं। – winstonyw

+0

बस एक और नोट है कि फ़ाइल को redirects_spec.rb नाम दिया जाना चाहिए, ताकि जब आप केवल 'रेक' करते हैं तो डिफ़ॉल्ट रेक कार्य इसे उठाएगा कमांड लाइन पर। – winstonyw

0

आप Rack::Test का उपयोग करें और यूआरएल और HTTP स्थिति कोड

get "/login" 
last_response.status.should == 302 
last_response.headers["Location"].should == "/auth/facebook" 
1

तुम भी उपयोग कर सकते हैं:

get "/login" 
response.should redirect_to(path) 
संबंधित मुद्दे

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