UNPKG

2.45 kBJavaScriptView Raw
1#! /usr/bin/env node
2
3/* globals require, process, __dirname */
4
5'use strict';
6
7const SPECS_GLOB = '!(node_modules|jspm_packages)/**/*spec.js';
8
9let _ = require('lodash'),
10 glob = require('glob'),
11 path = require('path'),
12 express = require('express'),
13 http = require('http'),
14 program = require('commander'),
15 serveIndex = require('serve-index');
16
17program
18 .usage('[options] <file ...>')
19 .option('-p, --port <portNumber>', 'serve spec list on the specified local port number', parseInt, 5678)
20 .option('-w, --webpackPort <webpackPort>', 'local webpack dev server port ', '8080')
21 .option('-t, --webpackTestPath <webpackTestPath>', 'path on webpack dev server that specs live under', 'test')
22 .parse(process.argv);
23
24let projectDir = path.resolve(process.cwd(), program.args && program.args.length > 0 ? program.args[0] : ''),
25 go = {cwd: projectDir},
26 projectName = projectDir.split(path.sep).pop(),
27 jasmineDir = `${process.cwd()}/node_modules/jasmine-core`,
28 webpackBaseUrl = `http://localhost:${program.webpackPort}/`,
29 webpackLiveReloadBaseUrl = `${webpackBaseUrl}webpack-dev-server/${program.webpackTestPath}/`,
30 webpackDebugBaseUrl = `${webpackBaseUrl}${program.webpackTestPath}/`;
31
32function getSpecs() {
33 return new Promise((res, rej) => {
34 glob(SPECS_GLOB, go, (err, files) => {
35 if (err) {
36 rej(err);
37 } else {
38 res(_.sortBy(_.map(_.filter(files, file => !_.includes(file, 'e2e')), file => ({
39 name: path.basename(file, '.js'),
40 path: file,
41 url: `${webpackLiveReloadBaseUrl}${file.toString().slice(0, -2)}html`,
42 debugUrl: `${webpackDebugBaseUrl}${file.toString().slice(0, -2)}html`
43 })), 'name'));
44 }
45 });
46 });
47}
48
49let app = express();
50
51app.set('view engine', 'jade');
52app.set('views', `${__dirname}/views`);
53app.use('/jasmine', serveIndex(jasmineDir, {icons: true}));
54app.use('/jasmine', express.static(jasmineDir));
55
56app.get('/', (req, res) => {
57 getSpecs()
58 .then(specs => {
59 res.render('home', {
60 projectName,
61 specs
62 });
63 })
64 .catch(error => {
65 res.status(500).render('500', {error});
66 });
67});
68
69http
70 .createServer(app)
71 .listen(program.port, () => console.log(`HTTP server listening on port ${program.port}`));
\No newline at end of file