2016-03-10 14 views
11

sto cercando di seguire styleguide AngularJs 1.x di John Papa (organising tests) e posizionare *.spec.js file (da eseguire utilizzando Karma) accanto al codice client , che risulta in file come some.filter.js e some.filter.spec.js posizionati uno accanto all'altro.Escludere * .spec.js file in Rails patrimoniale gasdotto (application.js)

Tuttavia, ciò che devo evitare, è includere i file nella pipeline delle risorse.

Le uniche opzioni che vedo per ora sono di evitare l'uso di //= require_tree . nel file application.js e di specificare ogni singolo file in modo esplicito oppure di rinunciare a mantenere i file spec accanto al codice.

Esiste un modo migliore per ottenere il comportamento desiderato?

(sto usando pignoni 3.5.2 e 4.2.6 rotaie)

risposta

1

Si prega di notare: questa risposta si basa sulla defsprite's one, perché mi ha segnalato nella giusta direzione, ma la realtà si è rivelata un po 'più dura.

Introdurre nelle config/initializers/sprockets.rb per registrare un nuovo pignoni processore:

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 

Le modifiche più importanti rispetto alla risposta originale includono la conversione di percorsi assoluti restituiti da Dir a quelli relativi (percorsi assoluti non sono accettati da pignoni) e il diverso metodo di registrazione (Rails.application.assets è nil nel mio caso).

Poi, all'interno del vostro application.js (prima di qualsiasi require_tree dichiarazioni) aggiungere:

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

Pignoni sé non implementa il file globbing (ancora) - questo può ottenere solo fornendo un personalizzato DirectiveProcessor. Per fortuna, c'è già una gemma che fornisce esattamente ciò che si vuole: https://github.com/backupify/sprockets-glob

Dalla documentazione:

# 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 
Problemi correlati