namespace :test do
desc "Run tests for templates" task templates: "templates:all" namespace :templates do task all: [ :daemonize, :npm, :rackup, :wait, :mocha, :kill, :exit ] task serve: [ :npm, :rackup ] work_dir = Pathname(EXPANDED_CWD).join("test/templates") pid_file = Pathname(Dir.tmpdir).join("web_console.#{SecureRandom.uuid}.pid") runner_uri = URI.parse("http://localhost:29292/html/spec_runner.html") rackup_opts = "-p #{runner_uri.port}" test_result = nil def need_to_wait?(uri) Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) } rescue Errno::ECONNREFUSED retry if yield end task :daemonize do rackup_opts += " -D -P #{pid_file}" end task :npm do Dir.chdir(work_dir) { system "npm install --silent" } end task :rackup do Dir.chdir(work_dir) { system "bundle exec rackup #{rackup_opts}" } end task :wait do cnt = 0 need_to_wait?(runner_uri) { sleep 1; cnt += 1; cnt < 5 } end task :mocha do Dir.chdir(work_dir) { test_result = system("$(npm bin)/mocha-phantomjs #{runner_uri}") } end task :kill do system "kill #{File.read pid_file}" end task :exit do exit test_result end end
end