2012-09-19 28 views
7

मेरे पास एक रेल इंजन है जिसका मतलब है कि कुछ मॉडलों और नियंत्रकों को हमारी एक बड़ी परियोजना में प्रदान करना है। इंजन के लिए चश्मे का एक सुंदर सभ्य सेट है, इंजन के डमी ऐप के भीतर मैक्स और कुछ पूर्ण-स्तरीय मॉडल और नियंत्रकों का एक समूह का उपयोग करके यह सुनिश्चित करने के लिए कि इंजन ऐसा कर रहा है जो इसे करने और बड़े आवेदन के साथ काम कर रहा है।क्या मैं एक असली ऐप से रेल इंजन इंजन की चश्मा चला सकता हूं जो इसे माउंट करता है?

हालांकि, सभी परीक्षणों के साथ भी, जब मैं बड़े एप्लिकेशन में इंजन को अद्यतन करता हूं तो मुझे अक्सर टूटा व्यवहार मिलता है। अगर मेरे परीक्षण गुजर रहे हैं लेकिन व्यवहार टूट गया है, तो स्पष्ट रूप से परीक्षणों में कुछ गड़बड़ है, लेकिन क्या? क्या मैं बहुत ज्यादा मजाक कर रहा हूं, या पर्याप्त नहीं?

मुझे यह पता लगाने के करीब लाने के लिए, मैं पूर्ण आवेदन के अंदर से इंजन के परीक्षण चलाने में सक्षम होना चाहता हूं। ऐसा लगता है कि यह संभव होना चाहिए, लेकिन मैं इस पर एक संभाल पाने के लिए पूरी तरह से rspec समझ में नहीं आता है।

(यह this question से संबंधित है, लेकिन नहीं काफी एक ही;। मैं सिर्फ पूर्ण एप्लिकेशन पर्यावरण के भीतर इंजन के चश्मा चलाने के लिए एक आदेश से सभी चश्मा चलाने की कोशिश नहीं कर रहा हूँ, This भी संबंधित प्रतीत होती है वास्तव में। , मैंने और दोनों के साथ टैग किए गए प्रत्येक प्रश्न को पढ़ा है - बहुत सारे नहीं हैं - और वे सभी या तो मुझे नहीं चाहिए, या अनुत्तरित हैं।)

उत्तर

13

सबसे आसान समाधान पथ निर्दिष्ट करना होगा rspec कमांड में। तुम क्या आप फिर निर्देशिका संरचना है, तो

/project 
/engine 
/engine_2 

और सभी चश्मा

cd project 
rspec spec/ ../engine/spec ../engine_2/spec 

चलाना चाहिए लेकिन सिर्फ इस आरामदायक मैं हल हो प्रतीत नहीं होता है अगर आप सतत एकीकरण पर चश्मा चलाना चाहते हैं या एक अनुकूलित रेक स्पेक कार्य, पैटर्न विधि को बदलने के साथ यह समस्या।

lib/कार्य/rspec.rake इस

require "rspec/core/rake_task" 

RSpec::Core::RakeTask.new(:spec) 

task :default => :spec 
RSpec::Core::RakeTask.module_eval do 
    def pattern 
    extras = [] 
    Rails.application.config.rspec_paths.each do |dir| 
     if File.directory?(dir) 
     extras << File.join(dir, 'spec', '**', '*_spec.rb').to_s 
     end 
    end 
    [@pattern] | extras 
    end 
end 

इंजन कक्षा में की तरह दिखना चाहिए आप config.rspec_paths को

class Engine < ::Rails::Engine 
    # Register path to rspec 
    config.rspec_paths << self.root 
end 

एक पथ को जोड़ने और भूल नहीं है config.rspec_paths प्रारंभ करने में एक बेस परियोजना में कहीं।

यदि आप कारखानों को जोड़ना चाहते हैं तो आप प्रारंभकर्ता बना सकते हैं, आप यहां स्टैक ओवरफ्लो पर समाधान ढूंढ सकते हैं।

सुनिश्चित नहीं है कि यह समाधान सबसे अच्छा है लेकिन मेरे लिए काम करता है और मैं इससे खुश हूं। सौभाग्य!

+1

"यह मेरे लिए काम करता है और मैं इससे खुश हूं" किसी भी स्थिति में एक बिल्कुल अच्छा जवाब है! इस मामले में मैं केवल पथ की आपूर्ति करने के साथ शुरू करने में सक्षम हूं, इसलिए बंडल निष्पादन rspec \ 'बंडल शो इंजन_नाम \'/spec' जैसा कि आपके उत्तर से पता चलता है ठीक काम करता है। – pjmorse

+0

मैं इसे अपने ऐप/इंजन सेटअप के साथ काम करने के लिए नहीं मिला। इंजन चश्मा कभी नहीं भाग गया। क्या आप अधिक जानकारी के साथ एक गिस्ट प्रदान कर सकते हैं? – BM5k

+0

यहां हमारे प्रोजेक्ट से एक सारांश है https://gist.github.com/kamilio/5582548 –