Files
openfoodnetwork/lib/tasks/karma.rake
Pau Perez f9c0edf4b9 Always execute local karma
This ensure the dev will run the version specified in the package.json.
Besides, makes the rake task work as all rails tests, allowing you to
pass a RAILS_ENV.
2017-08-11 16:48:24 +02:00

42 lines
1.2 KiB
Ruby

ENV["RAILS_ENV"] ||= 'test'
namespace :karma do
task :start => :environment do |_task|
with_tmp_config :start
end
task :run => :environment do |_task|
with_tmp_config :start, "--single-run"
end
private
def with_tmp_config(command, args = nil)
Tempfile.open('karma_unit.js', Rails.root.join('tmp') ) do |f|
f.write unit_js(application_spec_files << i18n_file)
f.flush
trap('SIGINT') { puts "Killing Karma"; exit }
exec "node_modules/.bin/karma #{command} #{f.path} #{args}"
end
end
def application_spec_files
sprockets = Rails.application.assets
sprockets.append_path Rails.root.join("spec/javascripts")
Rails.application.assets.find_asset("application_spec.js").to_a.map {|e| e.pathname.to_s }
end
def unit_js(files)
puts files
unit_js = File.open('config/ng-test.conf.js', 'r').read
unit_js.gsub "APPLICATION_SPEC", "\"#{files.join("\",\n\"")}\""
end
def i18n_file
raise "I18n::JS module is missing" unless defined?(I18n::JS)
I18n::JS::DEFAULT_EXPORT_DIR_PATH.replace('tmp/javascripts')
I18n::JS.export
"#{Rails.root.join(I18n::JS::DEFAULT_EXPORT_DIR_PATH)}/translations.js"
end
end