2011-03-22 14 views
9

का उपयोग करते समय सही ढंग से काम नहीं कर रहा है, मैं रेल 3.0.5, rspec2 का उपयोग नवीनतम कैपिबरा के साथ कर रहा हूं।capybara

scope "(:locale)", :locale => /de|fr|it|en/ do 
    resources :dossiers 
end 

application_controller में मैं इस किया है:: की तरह

मार्गों सेटअप

def default_url_options(options={}) 
    options[:locale] = "es" 
    options 
end 

तो मेरे विचार में मैं बिना किसी समस्या के

link_to 'test', dossier_path(1) 

उपयोग कर सकते हैं।

लेकिन जब मैं कैपिबरा की यात्रा में ऐसा करता हूं तो यह लोकल के लिए 1 का उपयोग करने की कोशिश करता है, न कि आईडी के लिए। यह केवल जब मैं

visit dossier_path(nil, 1) 

या

visit dossier_path(:id => 1) 

का उपयोग लेकिन दोनों बदसूरत कर रहे हैं और एक गंदा हैक की तरह दिखता है काम करता है। तो मुझे इस गंदे हैक का उपयोग करने की आवश्यकता क्यों है और मैं क्या करना चाहता हूं, ताकि मैं विचारों की तरह पथ विधियों का उपयोग कर सकूं (इसलिए शून्य जोड़ने या स्पष्ट रूप से पास करने के गंदे हैक के बिना: id =>। ..)? :)

+0

आपके प्रश्न का शीर्षक इंगित करता है कि यह एक प्रश्न के बजाय एक उत्तर है। सामग्री पढ़ने के बाद, यह इंप्रेशन ज्यादा नहीं बदला। आप वास्तव में क्या खोज रहे हैं? – polarblau

+0

मुझे एक उत्तर मिल रहा है कि मुझे दिखाए गए गंदे हैक का उपयोग करने की आवश्यकता क्यों है और मैं क्या कर सकता हूं, ताकि मैं विचारों की तरह विधि का उपयोग कर सकूं (इसलिए शून्य जोड़ने या स्पष्ट रूप से पास करने के गंदे हैक के बिना: आईडी => ...)। – gucki

+0

क्षमा करें, मैंने अभी देखा कि शीर्षक गलत था। "अब" के बजाय यह "नहीं" होना चाहिए था, मैंने अभी इसे ठीक किया है;) – gucki

उत्तर

-1

सामने Capybara RSpec साथ एक ही रास्ता का प्रयोग के तहत दिखाया गया है here मैं इसे होना चाहिए यह आप के लिए काम कर रहा है ताकि

visit user_path(:id => myuser.id.to_s) 

लिख रहा है प्राप्त करने में सक्षम किया गया है

visit dossier_path(:id => "1") 

क्या यह काम करता है?

+0

क्षमा करें, मैं नहीं देखता कि यह डिफ़ॉल्ट यूआरएल विकल्पों से संबंधित मेरे प्रश्न से कैसे संबंधित है? – gucki

2

दुर्भाग्य से मार्ग जनरेशन आवेदन नियंत्रक के बाहर होता है। और Capybara मददगार मार्गों के लिए डिफ़ॉल्ट यूआरएल विकल्प प्रदान करने के लिए कोई जादू नहीं करता है।

लेकिन आप अपने routes.rb

scope "(:locale)", :locale => /de|fr|it|en/, :defaults => { :locale => "es" } do 
    resources :dossiers 
end 

अंदर डिफ़ॉल्ट स्थान निर्दिष्ट कर सकते हैं और अब अगर आप उत्तीर्ण नहीं होते हैं: एक मार्ग सहायक यह "es" लागू हो जाएगी करने के लिए स्थान के विकल्प। दरअसल, अपने नियंत्रक में अब रखना जरूरी नहीं है।

+1

उदाहरण के लिए current_user पर निर्भर डिफ़ॉल्ट के बारे में कैसे? – gucki

+0

यह बुरा जवाब है, यहां तक ​​कि मैंने इसे पहले ही ऊपर उठाया है। यह आपके परीक्षण पास करता है, लेकिन ऐप में लिंक का आधा हिस्सा डिफ़ॉल्ट लोकेल में फंस रहा है। – firedev

7

मैं एक समान मुद्दे में भाग गया। आप अनुरोध चश्मा में इस तरह की एक से पहले ब्लॉक में default_url_options सेट कर सकते हैं:

before :each do 
    app.default_url_options = { :locale => :es } 
end 
+0

बस इसके लिए थोड़ा और संदर्भ डालने के लिए: ऊपर दिया गया कोड 'Rspec.configure do | config |' ब्लॉक के भीतर कहीं होना चाहिए। – Lenart

2

मैं रेल 3.2.6 चल रहा हूँ और मैं एक तकनीक है कि मैं Phoet की टिप्पणी के तहत यहां https://github.com/rspec/rspec-rails/issues/255 पाया का उपयोग करें। बस इसे कहीं भी/spec/support में डालें और इसमें आपके सभी चश्मे को कवर करना चाहिए

class ActionView::TestCase::TestController 
    def default_url_options(options={}) 
    { :locale => I18n.default_locale } 
    end 
end 

class ActionDispatch::Routing::RouteSet 
    def default_url_options(options={}) 
    { :locale => I18n.default_locale } 
    end 
end 
संबंधित मुद्दे