From 59efc020e894c74501857ea8f08c5386d4ef5f8b Mon Sep 17 00:00:00 2001 From: Mike Brocchi Date: Sat, 1 Oct 2016 22:27:15 -0400 Subject: [PATCH] feature(generate): configure spec generation at the project level Fixes #2448 --- .../angular-cli/blueprints/class/index.js | 7 ++++- .../angular-cli/blueprints/component/index.js | 6 +++- .../angular-cli/blueprints/directive/index.js | 6 +++- .../angular-cli/blueprints/module/index.js | 6 +++- packages/angular-cli/blueprints/pipe/index.js | 6 +++- .../angular-cli/blueprints/service/index.js | 6 +++- packages/angular-cli/lib/config/schema.d.ts | 8 +++++ packages/angular-cli/lib/config/schema.json | 29 +++++++++++++++++++ tests/acceptance/generate-class.spec.js | 2 +- 9 files changed, 69 insertions(+), 7 deletions(-) diff --git a/packages/angular-cli/blueprints/class/index.js b/packages/angular-cli/blueprints/class/index.js index a280be2b22dc..9ddfa1a2459a 100644 --- a/packages/angular-cli/blueprints/class/index.js +++ b/packages/angular-cli/blueprints/class/index.js @@ -11,7 +11,7 @@ module.exports = { ], availableOptions: [ - { name: 'spec', type: Boolean, default: true } + { name: 'spec', type: Boolean } ], normalizeEntityName: function (entityName) { @@ -27,6 +27,11 @@ module.exports = { if (classType) { this.fileName += '.' + classType; } + + options.spec = options.spec !== undefined ? + options.spec : + this.project.ngConfigObj.get('defaults.spec.class'); + return { dynamicPath: this.dynamicPath.dir, flat: options.flat, diff --git a/packages/angular-cli/blueprints/component/index.js b/packages/angular-cli/blueprints/component/index.js index 39243e1eb508..1770fdce9b07 100644 --- a/packages/angular-cli/blueprints/component/index.js +++ b/packages/angular-cli/blueprints/component/index.js @@ -16,7 +16,7 @@ module.exports = { { name: 'inline-template', type: Boolean, aliases: ['it'] }, { name: 'inline-style', type: Boolean, aliases: ['is'] }, { name: 'prefix', type: Boolean, default: true }, - { name: 'spec', type: Boolean, default: true } + { name: 'spec', type: Boolean } ], beforeInstall: function() { @@ -64,6 +64,10 @@ module.exports = { options.inlineTemplate : this.project.ngConfigObj.get('defaults.inline.template'); + options.spec = options.spec !== undefined ? + options.spec : + this.project.ngConfigObj.get('defaults.spec.component'); + return { dynamicPath: this.dynamicPath.dir.replace(this.dynamicPath.appRoot, ''), flat: options.flat, diff --git a/packages/angular-cli/blueprints/directive/index.js b/packages/angular-cli/blueprints/directive/index.js index 5523ae7eeffb..790c34890acf 100644 --- a/packages/angular-cli/blueprints/directive/index.js +++ b/packages/angular-cli/blueprints/directive/index.js @@ -13,7 +13,7 @@ module.exports = { availableOptions: [ { name: 'flat', type: Boolean, default: true }, { name: 'prefix', type: Boolean, default: true }, - { name: 'spec', type: Boolean, default: true } + { name: 'spec', type: Boolean } ], beforeInstall: function() { @@ -42,6 +42,10 @@ module.exports = { }, locals: function (options) { + options.spec = options.spec !== undefined ? + options.spec : + this.project.ngConfigObj.get('defaults.spec.directive'); + return { dynamicPath: this.dynamicPath.dir, flat: options.flat, diff --git a/packages/angular-cli/blueprints/module/index.js b/packages/angular-cli/blueprints/module/index.js index 7153c6650034..f0004fb7fe28 100644 --- a/packages/angular-cli/blueprints/module/index.js +++ b/packages/angular-cli/blueprints/module/index.js @@ -7,7 +7,7 @@ module.exports = { description: '', availableOptions: [ - { name: 'spec', type: Boolean, default: false }, + { name: 'spec', type: Boolean }, { name: 'routing', type: Boolean, default: false } ], @@ -20,6 +20,10 @@ module.exports = { }, locals: function (options) { + options.spec = options.spec !== undefined ? + options.spec : + this.project.ngConfigObj.get('defaults.spec.module'); + return { dynamicPath: this.dynamicPath.dir, spec: options.spec, diff --git a/packages/angular-cli/blueprints/pipe/index.js b/packages/angular-cli/blueprints/pipe/index.js index 6300ff4b78c4..d4a65b158641 100644 --- a/packages/angular-cli/blueprints/pipe/index.js +++ b/packages/angular-cli/blueprints/pipe/index.js @@ -12,7 +12,7 @@ module.exports = { availableOptions: [ { name: 'flat', type: Boolean, default: true }, - { name: 'spec', type: Boolean, default: true } + { name: 'spec', type: Boolean } ], beforeInstall: function() { @@ -31,6 +31,10 @@ module.exports = { }, locals: function (options) { + options.spec = options.spec !== undefined ? + options.spec : + this.project.ngConfigObj.get('defaults.spec.pipe'); + return { dynamicPath: this.dynamicPath.dir, flat: options.flat diff --git a/packages/angular-cli/blueprints/service/index.js b/packages/angular-cli/blueprints/service/index.js index b2912cdabd4a..e08e0e349ff3 100644 --- a/packages/angular-cli/blueprints/service/index.js +++ b/packages/angular-cli/blueprints/service/index.js @@ -9,7 +9,7 @@ module.exports = { availableOptions: [ { name: 'flat', type: Boolean, default: true }, - { name: 'spec', type: Boolean, default: true } + { name: 'spec', type: Boolean } ], normalizeEntityName: function (entityName) { @@ -20,6 +20,10 @@ module.exports = { }, locals: function (options) { + options.spec = options.spec !== undefined ? + options.spec : + this.project.ngConfigObj.get('defaults.spec.service'); + return { dynamicPath: this.dynamicPath.dir, flat: options.flat diff --git a/packages/angular-cli/lib/config/schema.d.ts b/packages/angular-cli/lib/config/schema.d.ts index 2c09a9471ca3..c1fd6850d710 100644 --- a/packages/angular-cli/lib/config/schema.d.ts +++ b/packages/angular-cli/lib/config/schema.d.ts @@ -64,5 +64,13 @@ export interface CliConfig { style?: boolean; template?: boolean; }; + spec?: { + class?: boolean; + component?: boolean; + directive?: boolean; + module?: boolean; + pipe?: boolean; + service?: boolean; + }; }; } diff --git a/packages/angular-cli/lib/config/schema.json b/packages/angular-cli/lib/config/schema.json index 8abcc7870466..098d52a4d2ad 100644 --- a/packages/angular-cli/lib/config/schema.json +++ b/packages/angular-cli/lib/config/schema.json @@ -151,6 +151,35 @@ "default": false } } + }, + "spec": { + "type": "object", + "properties": { + "class": { + "type": "boolean", + "default": false + }, + "component": { + "type": "boolean", + "default": true + }, + "directive": { + "type": "boolean", + "default": true + }, + "module": { + "type": "boolean", + "default": false + }, + "pipe": { + "type": "boolean", + "default": true + }, + "service": { + "type": "boolean", + "default": true + } + } } }, "additionalProperties": false diff --git a/tests/acceptance/generate-class.spec.js b/tests/acceptance/generate-class.spec.js index ee67f611f734..5ec94d056f30 100644 --- a/tests/acceptance/generate-class.spec.js +++ b/tests/acceptance/generate-class.spec.js @@ -32,7 +32,7 @@ describe('Acceptance: ng generate class', function () { it('ng generate class my-class', function () { return ng(['generate', 'class', 'my-class']).then(() => { expect(existsSync(path.join(testPath, 'my-class.ts'))).to.equal(true); - expect(existsSync(path.join(testPath, 'my-class.spec.ts'))).to.equal(true); + expect(existsSync(path.join(testPath, 'my-class.spec.ts'))).to.equal(false); }); });