2016-03-10 3 views
11

Я пытаюсь следовать AngularJs 1.x styleguide (organising tests) Джона Папы и размещать файлы *.spec.js (для выполнения с использованием кармы) рядом с кодом клиента , в результате чего файлы, такие как some.filter.js и some.filter.spec.js, находятся рядом друг с другом.Исключить файлы * .spec.js в конвейере ресурсов Rails (application.js)

Однако, что мне нужно избегать, в том числе файлы *.spec.js в конвейере активов.

Единственные варианты, которые я вижу сейчас, либо избегают использования //= require_tree . в файле application.js и явно указывать каждый файл, либо отказаться от хранения спецификационных файлов рядом с кодом.

Есть ли лучший способ достижения желаемого поведения?

(я использую звездочки 3.5.2 и рельсы 4.2.6)

ответ

1

Обратите внимание: этот ответ основан на defsprite's one, потому что он указал мне в правильном направлении, но реальность оказалась немного более жесткой.

Поместите следующий в config/initializers/sprockets.rb зарегистрировать новую звездочку процессор:

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 к относительным (абсолютные путям не принимается звездочки) и другой способ регистрации (Rails.application.assets - nil в моем случае).

Тогда в ваших application.js (до любой require_tree заявления) добавить:

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

сам Звездочки не реализует файл подстановка (пока) - это может достичь только путем создания пользовательских 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 

 Смежные вопросы

  • Нет связанных вопросов^_^