From 6d15a4ca4df037da3397385382d3d9a3ce299b65 Mon Sep 17 00:00:00 2001 From: jdar22169 Date: Wed, 29 Jun 2016 20:06:42 -0700 Subject: [PATCH] added error handler service and unit testing --- Maddie/.eslintignore | 7 +++ Maddie/.eslintrc | 43 ++++++++++++++ Maddie/.gitignore | 3 + Maddie/app/js/client.js | 5 ++ Maddie/app/js/controller/appController.js | 5 ++ Maddie/app/js/controller/index.js | 3 + Maddie/app/js/services/errorHandler.js | 17 ++++++ Maddie/app/js/services/index.js | 3 + Maddie/gulpfile.js | 10 ++++ Maddie/karma.conf.js | 69 +++++++++++++++++++++++ Maddie/package.json | 24 ++++++++ Maddie/test/service_test.js | 26 +++++++++ 12 files changed, 215 insertions(+) create mode 100644 Maddie/.eslintignore create mode 100644 Maddie/.eslintrc create mode 100644 Maddie/.gitignore create mode 100644 Maddie/app/js/client.js create mode 100644 Maddie/app/js/controller/appController.js create mode 100644 Maddie/app/js/controller/index.js create mode 100644 Maddie/app/js/services/errorHandler.js create mode 100644 Maddie/app/js/services/index.js create mode 100644 Maddie/gulpfile.js create mode 100644 Maddie/karma.conf.js create mode 100644 Maddie/package.json create mode 100644 Maddie/test/service_test.js diff --git a/Maddie/.eslintignore b/Maddie/.eslintignore new file mode 100644 index 00000000..4c2f916f --- /dev/null +++ b/Maddie/.eslintignore @@ -0,0 +1,7 @@ +**/node_modules/* +**/vendor/* +**/*.min.js +**/build/* +**/test/*_bundle* +*.md +package.json diff --git a/Maddie/.eslintrc b/Maddie/.eslintrc new file mode 100644 index 00000000..d6035aa6 --- /dev/null +++ b/Maddie/.eslintrc @@ -0,0 +1,43 @@ +{ + "rules":{ + "no-console":0, + "indent":[ + 2, + 2, + {"SwitchCase": 1} + ], + "quotes":[ + 2, + "single" + ], + "linebreak-style":[ + 2, + "unix" + ], + "semi":[ + 2, + "always" + ] + }, + "env":{ + "es6":true, + "node":true, + "browser":true, + "mocha":true, + "jasmine":true + }, + "globals":{ + "describe":false, + "it":false, + "beforeEach":false, + "afterEach":false, + "before":false, + "after":false + }, + "ecmaFeatures":{ + "modules":true, + "experimentalObjectRestSpread":true, + "impliedStrict":true + }, + "extends":"eslint:recommended" +} diff --git a/Maddie/.gitignore b/Maddie/.gitignore new file mode 100644 index 00000000..56cf1912 --- /dev/null +++ b/Maddie/.gitignore @@ -0,0 +1,3 @@ +node_modules +test/test_bundle.js +.DS_Store diff --git a/Maddie/app/js/client.js b/Maddie/app/js/client.js new file mode 100644 index 00000000..6334e452 --- /dev/null +++ b/Maddie/app/js/client.js @@ -0,0 +1,5 @@ +'use strict'; +const angular = require('angular'); +const app = angular.module('ErrorApp', []); +require('./controller')(app); +require('./services')(app); diff --git a/Maddie/app/js/controller/appController.js b/Maddie/app/js/controller/appController.js new file mode 100644 index 00000000..d2aec0b0 --- /dev/null +++ b/Maddie/app/js/controller/appController.js @@ -0,0 +1,5 @@ +module.exports = function(app){ + app.controller('appController', function(ErrorHandler){ + this.error = ErrorHandler.getErrors(); + }); +}; diff --git a/Maddie/app/js/controller/index.js b/Maddie/app/js/controller/index.js new file mode 100644 index 00000000..6cb2ecfc --- /dev/null +++ b/Maddie/app/js/controller/index.js @@ -0,0 +1,3 @@ +module.exports = function(app){ + require('./appController.js')(app); +}; diff --git a/Maddie/app/js/services/errorHandler.js b/Maddie/app/js/services/errorHandler.js new file mode 100644 index 00000000..c5ab4622 --- /dev/null +++ b/Maddie/app/js/services/errorHandler.js @@ -0,0 +1,17 @@ +module.exports = function(app){ + app.factory('ErrorHandler', function() { + const service = {}; + const errors = []; + + service.logError = function(message){ + return function(err){ + errors.push(message); + console.log(err); + }; + }; + service.getErrors = function() { + return errors; + }; + return service; + }); +}; diff --git a/Maddie/app/js/services/index.js b/Maddie/app/js/services/index.js new file mode 100644 index 00000000..9791e186 --- /dev/null +++ b/Maddie/app/js/services/index.js @@ -0,0 +1,3 @@ +module.exports = function(app){ + require('./errorHandler.js')(app); +}; diff --git a/Maddie/gulpfile.js b/Maddie/gulpfile.js new file mode 100644 index 00000000..a81244db --- /dev/null +++ b/Maddie/gulpfile.js @@ -0,0 +1,10 @@ +'use strict'; + +const gulp = require('gulp'); +const webpack = require('webpack-stream'); + +gulp.task('bundle:test', () => { + return gulp.src(__dirname + '/test/service_test.js') + .pipe(webpack({output:{filename:'test_bundle.js'}})) + .pipe(gulp.dest('./test')); +}); diff --git a/Maddie/karma.conf.js b/Maddie/karma.conf.js new file mode 100644 index 00000000..51013842 --- /dev/null +++ b/Maddie/karma.conf.js @@ -0,0 +1,69 @@ +// Karma configuration +// Generated on Wed Jun 29 2016 19:34:02 GMT-0700 (PDT) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['jasmine'], + + + // list of files / patterns to load in the browser + files: [ + 'test/test_bundle.js' + ], + + + // list of files to exclude + exclude: [ + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: false, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['Chrome'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +} diff --git a/Maddie/package.json b/Maddie/package.json new file mode 100644 index 00000000..53548178 --- /dev/null +++ b/Maddie/package.json @@ -0,0 +1,24 @@ +{ + "name": "Maddie", + "version": "1.0.0", + "description": "", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "angular": "^1.5.7", + "angular-mocks": "^1.5.7", + "gulp": "^3.9.1", + "jasmine-core": "^2.4.1", + "karma": "^1.1.0", + "karma-chrome-launcher": "^1.0.1", + "webpack-stream": "^3.2.0" + } +} diff --git a/Maddie/test/service_test.js b/Maddie/test/service_test.js new file mode 100644 index 00000000..78305ea6 --- /dev/null +++ b/Maddie/test/service_test.js @@ -0,0 +1,26 @@ +'use strict'; + +const angular = require('angular'); +require('angular-mocks'); +require('../app/js/client.js'); + +describe('service unit test', () => { + let errorHandler; + beforeEach(() => { + angular.mock.module('ErrorApp'); + angular.mock.inject(function(ErrorHandler){ + errorHandler = ErrorHandler; + }); + }); + it('should be a function', () => { + expect(typeof errorHandler.getErrors).toBe('function'); + }); + it('should get an array', () => { + expect(Array.isArray(errorHandler.getErrors())).toBe(true); + }); + it('should add an error to the log', () => { + errorHandler.logError('test')({}); + let errorArray = errorHandler.getErrors(); + expect(errorArray[0]).toBe('test'); + }); +});