-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
62 lines (51 loc) · 1.98 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env node
'use strict';
const fs = require('fs');
const path = require('path');
const yargs = require('yargs');
const ejs = require('ejs');
const parseTypescript = require('./src/lib/parse-typescript.js');
const util = require('./src/lib/util.js');
const getDirectiveData = require('./src/get-directive-data.js');
const getInjectableData = require('./src/get-injectable-data.js');
const getPipeData = require('./src/get-pipe-data.js');
const getDefaultData = require('./src/get-default-data.js');
const argv = yargs.usage('Usage: $0 <angular-typescript-file> [options]')
.options({
's': { alias: 'spec', describe: 'write the spec file along with source file', type: 'boolean' }
})
.example('$0 my.component.ts', 'generate Angular unit test for my.component.ts')
.help('h')
.argv;
const tsFile = '' + argv._;
const typescript = fs.readFileSync(path.resolve(tsFile), 'utf8');
const specFilePath = path.resolve(tsFile.replace(/\.ts$/, '.spec.ts'));
const existingItBlocks = {};
parseTypescript(typescript).then(tsParsed => {
const angularType = util.getAngularType(typescript); // Component, Directive, Injectable, Pipe, or undefined
const ejsTemplate = util.getEjsTemplate(angularType);
let ejsData;
switch(angularType) {
case 'Component':
case 'Directive':
ejsData = getDirectiveData(tsParsed, tsFile, angularType);
break;
case 'Injectable':
ejsData = getInjectableData(tsParsed, tsFile);
break;
case 'Pipe':
ejsData = getPipeData(tsParsed, tsFile);
break;
default:
ejsData = getDefaultData(tsParsed, tsFile);
break;
}
ejsData.functionTests = Object.assign({}, ejsData.functionTests, existingItBlocks);
const generated = ejs.render(ejsTemplate, ejsData).replace(/\n\s+$/gm, '\n');
if(fs.existsSync(specFilePath)) {
util.createBackupFile(specFilePath, generated);
} else {
fs.writeFileSync(specFilePath, generated);
console.log('Generated unit test for', argv._[0], 'to', specFilePath);
}
});