2016-03-10 4 views
11

मैं जॉन पापा के एंगुलरजेस 1.x स्टाइलगाइड (organising tests) का पालन करने का प्रयास कर रहा हूं और क्लाइंट कोड के बगल में *.spec.js फ़ाइलों (कर्म का उपयोग करके निष्पादित किया जा सकता है) , जिसके परिणामस्वरूप some.filter.js और some.filter.spec.js जैसी फाइलें एक-दूसरे के बगल में होती हैं।रेल्स एसेट पाइपलाइन (application.js) में 0 .spec.js फ़ाइलों को बाहर निकालें

हालांकि, मुझे इससे बचने की क्या ज़रूरत है, इसमें संपत्ति पाइपलाइन में *.spec.js फ़ाइलें शामिल हैं।

अब के लिए देखे जाने वाले एकमात्र विकल्प //= require_tree .application.js फ़ाइल में से बचते हैं और प्रत्येक फ़ाइल को स्पष्ट रूप से निर्दिष्ट करते हैं, या कोड के बगल में spec फ़ाइलों को रखने पर छोड़ देते हैं।

वांछित व्यवहार प्राप्त करने का कोई बेहतर तरीका है?

(मैं sprockets 3.5.2 का उपयोग कर रहा है और 4.2.6 रेल) ​​

उत्तर

1

कृपया ध्यान दें: सौभाग्य से, वहाँ पहले से ही एक मणि वास्तव में उपलब्ध कराने के तुम क्या चाहते है इस जवाब defsprite's one पर आधारित है, क्योंकि यह मुझे सही दिशा में इशारा किया है, लेकिन हकीकत थोड़ी कठोर हो गई।

प्लेस config/initializers/sprockets.rb में निम्नलिखित एक नया sprockets प्रोसेसर रजिस्टर करने के लिए:

class DirectiveProcessor < Sprockets::DirectiveProcessor 
    def process_require_glob_directive(glob) 
    each_file(glob) { |fn| process_require_directive(fn) } 
    end 

    def process_stub_glob_directive(glob) 
    each_file(glob) { |fn| process_stub_directive(fn) } 
    end 

    private 

    def each_file(glob) 
    glob_pattern = "#{@dirname}/#{glob}" 
    path_prefix = Pathname.new(@dirname) 

    Dir[glob_pattern].sort.each do |path| 
     yield Pathname.new(path).relative_path_from(path_prefix).to_s 
    end 
    end 
end 

Rails.application.config.assets.configure do |env| 
    env.register_processor('application/javascript', DirectiveProcessor) 
end 

सबसे उल्लेखनीय मूल जवाब के संबंध में बदलाव शामिल हैं (निरपेक्ष पथ से स्वीकार नहीं कर रहे रिश्तेदार वालों के लिए Dir द्वारा दिया निरपेक्ष पथ परिवर्तित sprockets) और विभिन्न पंजीकरण विधि (Rails.application.assets मेरे मामले में nil है)।

फिर

, अपने application.js (require_tree किसी भी पहले बयान) के भीतर जोड़ें:

//= stub_glob angular/**/*.spec.js 
4

Sprockets ही फ़ाइल (अभी तक) ग्लोबिंग को लागू नहीं करता है - यह केवल एक कस्टम DirectiveProcessor उपलब्ध कराने के द्वारा प्राप्त किया जा सकता है। https://github.com/backupify/sprockets-glob

प्रलेखन से::

# config/initializers/sprockets.rb 
require 'sprockets/glob' 
Rails.application.assets.register_processor('application/javascript', Sprockets::Glob::DirectiveProcessor) 

# application.js 
//= require_glob features/**/*.js 
//= stub_glob features/**/*test.js 
संबंधित मुद्दे