From ccc75da58eb8dc21c629f4e35fa5c7a82b284a46 Mon Sep 17 00:00:00 2001 From: Simon Boudrias Date: Wed, 30 Dec 2015 03:00:23 -0500 Subject: [PATCH] chore(tests): refactor subgens tests Split up test for subgenerators in their own files --- test/app-with-appname.js | 1 - test/app-with-apppath.js | 83 +++++++++++++++++++ test/constant.js | 22 +++++ test/controller.js | 28 +++++++ test/directive.js | 28 +++++++ test/factory.js | 22 +++++ test/filter.js | 28 +++++++ test/provider.js | 22 +++++ test/route.js | 57 +++++-------- test/service.js | 28 +++++++ test/test-apppath.js | 171 --------------------------------------- test/utils.js | 25 ++++++ test/value.js | 22 +++++ test/view.js | 37 +++++++++ 14 files changed, 364 insertions(+), 210 deletions(-) create mode 100644 test/app-with-apppath.js create mode 100644 test/constant.js create mode 100644 test/controller.js create mode 100644 test/directive.js create mode 100644 test/factory.js create mode 100644 test/filter.js create mode 100644 test/provider.js create mode 100644 test/service.js delete mode 100644 test/test-apppath.js create mode 100644 test/utils.js create mode 100644 test/value.js create mode 100644 test/view.js diff --git a/test/app-with-appname.js b/test/app-with-appname.js index 7343488d7..158f338f8 100644 --- a/test/app-with-appname.js +++ b/test/app-with-appname.js @@ -4,7 +4,6 @@ var path = require('path'); var helpers = require('yeoman-test'); var assert = require('yeoman-assert'); - describe('angular:app appName', function () { beforeEach(function (done) { helpers diff --git a/test/app-with-apppath.js b/test/app-with-apppath.js new file mode 100644 index 000000000..c10f9e927 --- /dev/null +++ b/test/app-with-apppath.js @@ -0,0 +1,83 @@ +'use strict'; + +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); +var _ = require('underscore.string'); + +describe('Angular generator appPath option', function () { + var appPath = 'customAppPath'; + var expected = [ + appPath + '/404.html', + appPath + '/favicon.ico', + appPath + '/robots.txt', + appPath + '/styles/main.scss', + appPath + '/views/main.html', + appPath + '/index.html', + '.bowerrc', + '.editorconfig', + '.gitignore', + '.jshintrc', + 'Gruntfile.js', + 'package.json', + 'bower.json' + ]; + + beforeEach(function () { + this.angular = helpers + .run(require.resolve('../app')) + .withGenerators([ + require.resolve('../common'), + require.resolve('../controller'), + require.resolve('../main'), + [helpers.createDummyGenerator(), 'karma:app'] + ]) + .withOptions({ + 'appPath': appPath, + 'skip-welcome-message': true, + 'skip-message': true + }) + .withArguments(['upperCaseBug']) + .withPrompts({ + compass: true, + bootstrap: true, + compassBootstrap: true, + modules: [] + }); + }); + + describe('default settings', function () { + beforeEach(function (done) { + this.angular.on('end', done); + }); + + it('generates base files inside the appPath', function () { + assert.file(expected); + }); + + it('creates JS files in appPath', function () { + assert.file([ + '.jscsrc', + appPath + '/scripts/app.js', + appPath + '/scripts/controllers/main.js', + 'test/spec/controllers/main.js' + ]); + }); + }); + + describe('--coffee', function () { + beforeEach(function (done) { + this.angular.withOptions({ + coffee: true + }).on('end', done); + }); + + it('creates CoffeeScript files', function () { + assert.file([].concat(expected, [ + appPath + '/scripts/app.coffee', + appPath + '/scripts/controllers/main.coffee', + 'test/spec/controllers/main.coffee' + ])); + }); + }); +}); diff --git a/test/constant.js b/test/constant.js new file mode 100644 index 000000000..5ece658f2 --- /dev/null +++ b/test/constant.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:constant', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../constant')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new constant', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /constant\('foo'/ + ); + }); +}); diff --git a/test/controller.js b/test/controller.js new file mode 100644 index 000000000..13ca026fb --- /dev/null +++ b/test/controller.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:controller', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../controller')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new controller', function () { + assert.file('test/spec/controllers/foo.js'); + assert.fileContent( + path.join('app/scripts/controllers/foo.js'), + /controller\('FooCtrl'/ + ); + }); +}); diff --git a/test/directive.js b/test/directive.js new file mode 100644 index 000000000..c11585354 --- /dev/null +++ b/test/directive.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:directive', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../directive')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new directive', function () { + assert.file('test/spec/directives/foo.js'); + assert.fileContent( + path.join('app/scripts/directives/foo.js'), + /directive\('foo'/ + ); + }); +}); diff --git a/test/factory.js b/test/factory.js new file mode 100644 index 000000000..56a131fdd --- /dev/null +++ b/test/factory.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:factory', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../factory')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new factory', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /factory\('foo'/ + ); + }); +}); diff --git a/test/filter.js b/test/filter.js new file mode 100644 index 000000000..ad92eec09 --- /dev/null +++ b/test/filter.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:filter', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../filter')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new filter', function () { + assert.file('test/spec/filters/foo.js'); + assert.fileContent( + path.join('app/scripts/filters/foo.js'), + /filter\('foo'/ + ); + }); +}); diff --git a/test/provider.js b/test/provider.js new file mode 100644 index 000000000..0b8f66033 --- /dev/null +++ b/test/provider.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:provider', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../provider')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new provider', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /provider\('foo'/ + ); + }); +}); diff --git a/test/route.js b/test/route.js index b7c4b84f6..76609328a 100644 --- a/test/route.js +++ b/test/route.js @@ -3,49 +3,30 @@ var path = require('path'); var helpers = require('yeoman-test'); var assert = require('yeoman-assert'); - -function generateFullProject(cb) { - helpers.run(require.resolve('../app')) - .withGenerators([ - require.resolve('../common'), - require.resolve('../controller'), - require.resolve('../main'), - require.resolve('../route'), - require.resolve('../view'), - [ helpers.createDummyGenerator(), 'karma:app'] - ]) - .withOptions({ - 'appPath': 'app', - 'skip-welcome-message': true, - 'skip-message': true - }) - .withPrompts({ - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: ['routeModule'] - }) - .on('end', cb); -} +var generateFullProject = require('./utils').generateFullProject; describe('angular:route', function () { beforeEach(function (done) { - generateFullProject(function () { - this.angularRoute = helpers.run(require.resolve('../route')) - .withGenerators([ - require.resolve('../controller'), - require.resolve('../view') - ]) - .withOptions({ - appPath: 'app' - }) - .withArguments(['simpleroute']); + generateFullProject() + .withPrompts({ + modules: ['routeModule'] + }) + .on('end', function () { + this.angularRoute = helpers.run(require.resolve('../route')) + .withGenerators([ + require.resolve('../controller'), + require.resolve('../view') + ]) + .withOptions({ + appPath: 'app' + }) + .withArguments(['simpleroute']); - // Hack to not clear the directory - this.angularRoute.inDirSet = true; + // Hack to not clear the directory + this.angularRoute.inDirSet = true; - done(); - }.bind(this)); + done(); + }.bind(this)); }); it('generates default route items', function (done) { diff --git a/test/service.js b/test/service.js new file mode 100644 index 000000000..1ddcd40a8 --- /dev/null +++ b/test/service.js @@ -0,0 +1,28 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:service', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../service')) + .withArguments('foo') + .inTmpDir(function (dir) { + fs.writeFileSync( + path.join(dir, 'bower.json'), + '{"appPath": "app"}' + ); + }) + .on('end', done); + }); + + it('generates a new service', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /service\('foo'/ + ); + }); +}); diff --git a/test/test-apppath.js b/test/test-apppath.js deleted file mode 100644 index 153bca5c4..000000000 --- a/test/test-apppath.js +++ /dev/null @@ -1,171 +0,0 @@ -'use strict'; - -var path = require('path'); -var helpers = require('yeoman-generator').test; -var assert = require('yeoman-assert'); -var _ = require('underscore.string'); - -describe('Angular generator appPath option', function () { - var angular; - var appPath = 'customAppPath'; - var expected = [ - appPath + '/404.html', - appPath + '/favicon.ico', - appPath + '/robots.txt', - appPath + '/styles/main.scss', - appPath + '/views/main.html', - appPath + '/index.html', - '.bowerrc', - '.editorconfig', - '.gitignore', - '.jshintrc', - 'Gruntfile.js', - 'package.json', - 'bower.json' - ]; - var mockPrompts = { - compass: true, - bootstrap: true, - compassBootstrap: true, - modules: [] - }; - var genOptions = { - 'appPath': appPath, - 'skip-install': true, - 'skip-welcome-message': true, - 'skip-message': true - }; - - beforeEach(function (done) { - helpers.testDirectory(path.join(__dirname, 'tmp', 'app'), function (err) { - if (err) { - done(err); - } - - angular = helpers.createGenerator( - 'angular:app', - [ - '../../../app', - '../../../common', - '../../../controller', - '../../../main', - [ helpers.createDummyGenerator(), 'karma:app' ] - ], - false, - genOptions - ); - helpers.mockPrompt(angular, mockPrompts); - - done(); - }); - }); - - describe('App files', function () { - it('should generate dotfiles for apppath', function (done) { - angular.run({}, function () { - assert.file(expected); - done(); - }); - }); - - it('creates expected JS files', function (done) { - angular.run({}, function() { - assert.file([].concat(expected, [ - '.jscsrc', - appPath + '/scripts/app.js', - appPath + '/scripts/controllers/main.js', - 'test/spec/controllers/main.js' - ])); - done(); - }); - }); - - it('creates CoffeeScript files', function (done) { - angular.env.options.coffee = true; - angular.run([], function () { - assert.file([].concat(expected, [ - appPath + '/scripts/app.coffee', - appPath + '/scripts/controllers/main.coffee', - 'test/spec/controllers/main.coffee' - ])); - done(); - }); - }); - }); - - describe('Service Subgenerators', function () { - var generatorTest = function (generatorType, specType, targetDirectory, scriptNameFn, specNameFn, suffix, done) { - var angularGenerator; - var name = 'foo'; - var deps = [path.join('../../..', generatorType)]; - angularGenerator = helpers.createGenerator('angular:' + generatorType, deps, [name], genOptions); - - angular.run([], function () { - angularGenerator.run([], function () { - assert.fileContent([ - [ - path.join(appPath + '/scripts', targetDirectory, name + '.js'), - new RegExp( - generatorType + '\\(\'' + scriptNameFn(name) + suffix + '\'', - 'g' - ) - ] - ]); - done(); - }); - }); - }; - - it('should generate a new controller', function (done) { - generatorTest('controller', 'controller', 'controllers', _.classify, _.classify, 'Ctrl', done); - }); - - it('should generate a new directive', function (done) { - generatorTest('directive', 'directive', 'directives', _.camelize, _.camelize, '', done); - }); - - it('should generate a new filter', function (done) { - generatorTest('filter', 'filter', 'filters', _.camelize, _.camelize, '', done); - }); - - ['constant', 'factory', 'provider', 'value'].forEach(function(t) { - it('should generate a new ' + t, function (done) { - generatorTest(t, 'service', 'services', _.camelize, _.camelize, '', done); - }); - }); - - it('should generate a new service', function (done) { - generatorTest('service', 'service', 'services', _.capitalize, _.capitalize, '', done); - }); - }); - - describe('View', function () { - it('should generate a new view', function (done) { - var angularView; - var deps = [ '../../../view' ]; - angularView = helpers.createGenerator('angular:view', deps, ['foo'], genOptions); - - helpers.mockPrompt(angular, mockPrompts); - angular.run([], function () { - angularView.run([], function () { - assert.file([appPath + '/views/foo.html']); - done(); - }); - }); - }); - - it('should generate a new view in subdirectories', function (done) { - var angularView; - var deps = [ '../../../view' ]; - angularView = helpers.createGenerator('angular:view', deps, ['foo/bar'], genOptions); - - helpers.mockPrompt(angular, mockPrompts); - angular.run([], function () { - angularView.run([], function () { - assert.file([appPath + '/views/foo/bar.html']); - done(); - }); - }); - }); - }); -}); diff --git a/test/utils.js b/test/utils.js new file mode 100644 index 000000000..6c8d1e361 --- /dev/null +++ b/test/utils.js @@ -0,0 +1,25 @@ +'use strict'; +var helpers = require('yeoman-test'); + +exports.generateFullProject = function (cb) { + return helpers.run(require.resolve('../app')) + .withGenerators([ + require.resolve('../common'), + require.resolve('../controller'), + require.resolve('../main'), + require.resolve('../route'), + require.resolve('../view'), + [helpers.createDummyGenerator(), 'karma:app'] + ]) + .withOptions({ + 'appPath': 'app', + 'skip-welcome-message': true, + 'skip-message': true + }) + .withPrompts({ + compass: true, + bootstrap: true, + compassBootstrap: true, + modules: [] + }); +} diff --git a/test/value.js b/test/value.js new file mode 100644 index 000000000..2d4b6d760 --- /dev/null +++ b/test/value.js @@ -0,0 +1,22 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:value', function () { + beforeEach(function (done) { + helpers + .run(require.resolve('../value')) + .withArguments('foo') + .on('end', done); + }); + + it('generates a new value', function () { + assert.file('test/spec/services/foo.js'); + assert.fileContent( + path.join('app/scripts/services/foo.js'), + /value\('foo'/ + ); + }); +}); diff --git a/test/view.js b/test/view.js new file mode 100644 index 000000000..1f0c1434d --- /dev/null +++ b/test/view.js @@ -0,0 +1,37 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); +var helpers = require('yeoman-test'); +var assert = require('yeoman-assert'); + +describe('angular:constant', function () { + beforeEach(function () { + this.angularView = helpers + .run(require.resolve('../view')) + .withArguments('foo/bar'); + }); + + describe('default settings', function () { + beforeEach(function (done) { + this.angularView.on('end', done); + }); + + it('generates a new view', function () { + assert.file('app/views/foo/bar.html'); + }); + }); + + describe('--appPath', function () { + beforeEach(function (done) { + this.angularView + .withOptions({ + appPath: 'alternative' + }) + .on('end', done); + }); + + it('generates a new view', function () { + assert.file('alternative/views/foo/bar.html'); + }); + }); +});