2012-07-20 19 views
8

के साथ एक रेल 3.2 इंजन के लिए सभी राउटिंग उदाहरण विफल हो गए हैं। मैंने the normal fashion में एक रेल इंजन बनाया है, आरएसपीसी स्थापित किया है, और एक मॉडल के लिए एक मचान उत्पन्न किया है, लेकिन मुझे पास करने के लिए कोई रूटिंग चश्मा नहीं मिल सकता है।आरएसपीसी 2.10

describe Licensing::LicensesController do 
    it 'routes to #index' do 
    get('/licensing/licenses').should route_to('licensing/licenses#index') 
    end 
end 

मैं इस तरह डमी अनुप्रयोग में उदाहरण चल रहा हूँ:

$ cd spec/dummy 
$ rake spec 
/Users/brandan/.rvm/rubies/ruby-1.9.3-p194/bin/ruby -S rspec ../routing/licensing/licenses_routing_spec.rb 
F 

Failures: 

    1) Licensing::LicensesController routes to #index 
    Failure/Error: get('/licensing/licenses').should route_to('licensing/licenses#index') 
     No route matches "/licensing/licenses" 
    # /Users/brandan/repos/licensing/spec/routing/licensing/licenses_routing_spec.rb:5:in `block (2 levels) in <top (required)>' 

Finished in 0.04345 seconds 
1 example, 1 failure 

इंजन सही ढंग से डमी एप्लिकेशन में रखा जाता है:

# spec/dummy/config/routes.rb 
Rails.application.routes.draw do 
    mount Licensing::Engine => "/licensing" 
end 

यहाँ एक उदाहरण है

और मैं डमी ऐप में जा सकता हूं और कंसोल को फायर कर सकता हूं और उस मार्ग को ठीक कर सकता हूं:

1.9.3p194 :001 > app.get('/licensing/licenses') 
    Licensing::License Load (0.3ms) SELECT "licensing_licenses".* FROM "licensing_licenses" 
200 
1.9.3p194 :002 > app.response.body 
"<!DOCTYPE html>..." 

डमी एप्लिकेशन और RSpec के बीच कुछ विसंगति नहीं है, और मैं समझ नहीं कि यह क्या है। मैं कई लेख इस समस्या को हल करने के लिए दावा है कि मिल गया है, लेकिन उनमें से कोई मदद की है, और उनमें से कई रेल के लिए विशिष्ट हैं 3.1:

क्या किसी ने रेल 3.2/आरएसपीसी 2.10 में इस समस्या को हल किया है?

+0

मैं आपको लगता है कि अपने इंजन को एकीकृत एक डमी एप्लिकेशन के खिलाफ परीक्षण कर रहे हैं संभालने हूँ:

यहाँ इस विषय पर अच्छा धागे की एक और जोड़ी हैं। क्या आप सुनिश्चित हैं कि इंजन डमी ऐप के मार्गों में घुड़सवार है? यदि हां, तो क्या आप सुनिश्चित हैं कि आपका spec ': type =>: रूटिंग' है? –

+0

@TanzeebKhalili मुझे यकीन है कि मार्ग सही हैं क्योंकि वे कंसोल में और ब्राउज़र में काम करते हैं। मैं डमी ऐप के भीतर से चश्मा चला रहा हूँ। फ़ाइलें 'spec/routing' के अंतर्गत हैं, और स्पष्ट रूप से निर्दिष्ट करते हैं कि:: type =>: रूटिंग 'उदाहरणों को पास करने का कारण नहीं बनता है। कोई और विचार? : -/ – Brandan

+1

निम्नलिखित परिवर्तनों के बारे में: 1) विभिन्न वर्णित वस्तु: मार्गों का वर्णन करें "करें ..." और 2) विभिन्न वाक्यविन्यास: '{: get => '/ लाइसेंसिंग/लाइसेंस'}। Should be_routable' –

उत्तर

10

अद्यतन (2013- 10-31)

आरएसपीसी 2.14 अब fully supports engine routes:

module MyEngine 
    describe ExampleController do 
    routes { MyEngine::Engine.routes } 
    end 
end 

सभी मार्ग चश्मा करने के लिए यह करें:

# spec/spec_helper.rb 
config.include Module.new { 
    def self.included(base) 
    base.routes { Reportr::Engine.routes } 
    end 
}, type: :routing 

सबसे अच्छा समाधान मैं अब तक स्पष्ट रूप से मार्ग सेट है कि परीक्षण के दौरान इस्तेमाल किया जाएगा स्थापित कर रही है ताकि पता लगाने के लिए कर लिया है:

RSpec.configure do |config| 
    config.before(:each, type: :controller) { @routes = Licensing::Engine.routes } 
    config.before(:each, type: :routing) { @routes = Licensing::Engine.routes } 
end 

तो मैं नाम स्थान को छोड़ देते हैं करने के लिए अपने मार्ग उदाहरण के पुनर्लेखन के लिए था:

it 'routes to #index' do 
    get('/licenses').should route_to('licensing/licenses#index') 
end 

यह एक हैक की तरह लगता है, लेकिन यह समझ में आता है।मैं परीक्षण नहीं कर रहा हूं कि रेल एक विशेष पथ पर एक इंजन को घुमाने में सक्षम है या नहीं। मैं केवल परीक्षण कर रहा हूं कि मेरे इंजन ने अपने मार्गों को सही तरीके से स्थापित किया है। फिर भी, मुझे ऐसा करने के लिए एक आवृत्ति चर को ओवरराइट करने की आवश्यकता नहीं है।

+0

दूसरे लिंक ने मेरे लिए समस्या हल की। बहुत बहुत धन्यवाद! –

+0

इस समाधान ने rspec 2.14 में काम करना बंद कर दिया! –

+0

हां, और मार्ग {लाइसेंसिंग :: इंजन.रोट्स} इसे बदलने के लिए: आप इसे एक स्पेक में जोड़ सकते हैं, लेकिन मुझे इसे इंजन के __all__ नियंत्रक-चश्मा में जोड़ने का समाधान ढूंढना है ... – mugwump

7

मुझे लगता है कि आपको आरएसपीईसी को स्पष्ट रूप से सूचित करने की आवश्यकता है कि आप एक नामांकित रेल मार्ग का उपयोग कर रहे हैं। ईजी,

# :use_route => ENGINE_NAMESPACE 
:use_route => 'licensing' 

साथ ही, क्यों इस तरह RSpec नियंत्रक परीक्षणों के writting को आसान बनाने नहीं,

describe Licensing::LicensesController do 
    it 'GET index' do 
    get :index, use_route: 'licensing' 
    end 
end 

यहाँ RSpec नियंत्रकों मैंने किया था के लिए कोई लिंक है, https://github.com/westonplatter/questionnaire_engine/tree/engine/spec/controllers

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मेरा प्रश्न है विशेष रूप से रूटिंग परीक्षणों के बारे में - यानी, मैं सही नियंत्रक और कार्रवाई के लिए '/ लाइसेंसिंग/लाइसेंस 'मार्गों का स्पष्ट रूप से परीक्षण करना चाहता हूं, न कि मैं किसी दिए गए नियंत्रक पर' सूचकांक 'प्राप्त कर सकता हूं। मुझे लगता है कि मुझे समाधान मिल सकता है, हालांकि यह सुंदर नहीं है। – Brandan