我试图关注John Papa的AngularJs 1.x样式指南(organising tests)并在客户端代码旁边放置*.spec.js
个文件(使用Karma执行)导致some.filter.js
和some.filter.spec.js
之类的文件彼此相邻。
但是,我需要避免的是,在资产管道中包含*.spec.js
个文件。
我现在看到的唯一选项是避免在//= require_tree .
文件中使用application.js
并明确指定每个文件,或者放弃在代码旁边保留spec文件。
有没有更好的方法来实现理想的行为?
(我使用链轮3.5.2和导轨4.2.6)
答案 0 :(得分: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
答案 1 :(得分: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
为{{1在我的情况下)。
然后,在nil
(在任何application.js
语句之前)添加:
require_tree