1 | #! /usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 | 'use strict';
|
6 |
|
7 | const SPECS_GLOB = '!(node_modules|jspm_packages)/**/*spec.js';
|
8 |
|
9 | let _ = 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 |
|
17 | program
|
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 |
|
24 | let 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 |
|
32 | function 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 |
|
49 | let app = express();
|
50 |
|
51 | app.set('view engine', 'jade');
|
52 | app.set('views', `${__dirname}/views`);
|
53 | app.use('/jasmine', serveIndex(jasmineDir, {icons: true}));
|
54 | app.use('/jasmine', express.static(jasmineDir));
|
55 |
|
56 | app.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 |
|
69 | http
|
70 | .createServer(app)
|
71 | .listen(program.port, () => console.log(`HTTP server listening on port ${program.port}`)); |
\ | No newline at end of file |