Add karma testing

This patch adds configuration for Karma.

Change-Id: Ibb65060836f967ac81a57ea279d7fa494e238d49
Implements blueprint: merlin-unittests
This commit is contained in:
Paul Karikh 2015-04-07 14:57:40 +03:00 committed by Timur Sufiev
parent 1454a2792d
commit 05451e3e59
8 changed files with 273 additions and 0 deletions

63
Gruntfile.js Normal file
View File

@ -0,0 +1,63 @@
/*
* Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
*
* Licensed under the Apache License, Version 2.0 (the 'License'); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
module.exports = function(grunt){
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
/**
* grunt concat
*
* Creates a single file out of our javascript source in accordance
* with the concatenation priority. First the application module, then
* any dependent module declarations, and finally everything else.
*/
concat: {
dist: {
src: [
'./merlin/static/merlin/js/**/*.js'
],
dest: './merlin/dist/merlin.js'
}
},
uglify: {
options: {
mangle: false
},
my_target: {
files: {
'/merlindist/merlin.min.js': ['dist/merlin.js']
}
}
},
karma: {
options: {
// point all tasks to karma config file
configFile: 'karma-unit.conf.js'
},
unit: {
// run tests once instead of continuously
singleRun: true
}
}
});
grunt.loadNpmTasks('grunt-karma');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('test:unit', [
'karma:unit'
]);
};

22
bin/nodeenv.sh Normal file
View File

@ -0,0 +1,22 @@
#!/bin/bash
set -e
# This script checks if node is installed in the current path,
# and if not, will install the version specified. using nodeenv -p
#
#command -v node && echo "ok"
ENVDIR="$1"
VERSION="$2"
if [[ $(command -v node) ]]
then
exit
fi
if [[ -n "$VERSION" ]]
then
nodeenv -p "$ENVDIR" --node="$VERSION"
else
nodeenv -p "$ENVDIR"
fi

25
bower.json Normal file
View File

@ -0,0 +1,25 @@
{
"name": "merlin",
"version": "0.0.1",
"dependencies": {
"font-awesome": "4.3.0",
"angular": "1.3.10",
"angular-resource": "1.3.10",
"angular-sanitize": "1.3.10",
"bootstrap": "3.3.2",
"angular-ui-router": "0.2.13",
"angular-bootstrap": "0.12.0",
"angular-local-storage": "0.1.5",
"angular-elastic": "2.4.2",
"angular-moment": "0.9.0",
"angular-cache": "3.2.5"
},
"devDependencies": {
"angular-mocks": "1.3.10",
"angular-scenario": "1.3.10"
},
"resolutions": {
"angular": "1.3.10",
"font-awesome": "4.3.0"
}
}

54
karma-unit.conf.js Normal file
View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
module.exports = function (config) {
'use strict';
config.set({
port: 9876,
basePath: '',
frameworks: ['jasmine'],
browsers: [ 'PhantomJS'],
plugins: [
'karma-jasmine',
'karma-phantomjs-launcher',
],
files: [
'./bower_components/angular/angular.js',
'./bower_components/angular-mocks/angular-mocks.js',
'./merlin/static/merlin/js/merlin.init.js',
'./merlin/static/merlin/js/merlin.directives.js',
'./merlin/static/merlin/js/merlin.field.models.js',
'./merlin/static/merlin/js/merlin.panel.models.js',
'./merlin/static/merlin/js/merlin.utils.js',
'./merlin/static/merlin/js/lib/angular-filter.js',
'./merlin/static/merlin/js/lib/barricade.js',
'./merlin/static/merlin/js/lib/js-yaml.js',
'merlin/test/js/utilsSpec.js'
],
exclude: [
],
singleRun: true
});
};

View File

@ -0,0 +1,33 @@
describe('merlin.utils', function() {
'use strict';
var utils;
beforeEach(function() {
angular.mock.module('merlin');
angular.mock.inject(function($injector) {
utils = $injector.get('merlin.utils');
});
});
describe('makeTitle function', function() {
it('should capitalize the first letter of a string', function() {
expect(utils.makeTitle('some string')).toBe('Some string');
});
});
describe('condense Array method', function() {
it('Array prototype should have condense()', function() {
var array = [];
expect(array.condense).toBeDefined();
});
it('condense() should throw away undefined and null values', function() {
var array = [1, 0, 15, undefined, 7, null, null, 8];
expect(array.condense()).toEqual([1, 0, 15, 7, 8]);
});
});
});

22
nodeenv.sh Normal file
View File

@ -0,0 +1,22 @@
#!/bin/bash
set -e
# This script checks if node is installed in the current path,
# and if not, will install the version specified. using nodeenv -p
#
#command -v node && echo "ok"
ENVDIR="$1"
VERSION="$2"
if [[ $(command -v node) ]]
then
exit
fi
if [[ -n "$VERSION" ]]
then
nodeenv -p "$ENVDIR" --node="$VERSION"
else
nodeenv -p "$ENVDIR"
fi

35
package.json Normal file
View File

@ -0,0 +1,35 @@
{
"name": "SampleGrunt",
"version": "0.1.0",
"private": true,
"devDependencies": {
"bower": "1.3.12",
"grunt": "^0.4.5",
"grunt-bower-task": "^0.4.0",
"grunt-cli": "0.1.13",
"grunt-connect-proxy": "0.1.11",
"grunt-contrib-clean": "0.6.0",
"grunt-contrib-watch": "0.6.1",
"grunt-env": "0.4.1",
"grunt-eslint": "7.0.1",
"grunt-html2js": "0.2.9",
"grunt-karma": "0.9.0",
"grunt-open": "0.2.3",
"grunt-protractor-runner": "1.1.4",
"grunt-shell": "1.1.1",
"grunt-usemin": "2.4.0",
"grunt-webfont": "0.4.8",
"grunt-contrib-concat": "^0.5.1",
"grunt-contrib-uglify": "^0.8.1",
"grunt-karma": "^0.10.1",
"jasmine-core": "^2.2.0",
"karma": "^0.12.31",
"karma-chrome-launcher": "^0.1.7",
"karma-jasmine": "^0.3.5",
"karma-phantomjs-launcher": "^0.1.4"
},
"main": "Gruntfile.js",
"dependencies": {
"grunt": "^0.4.5"
}
}

19
tox.ini Normal file
View File

@ -0,0 +1,19 @@
[tox]
minversion = 1.6
skipsdist = True
[testenv]
whitelist_externals = bash
npm
node
nodejs
bower
grunt
[testenv:grunt]
deps = nodeenv
commands =
bash ./bin/nodeenv.sh {envdir} 0.10.29
npm install
{toxinidir}/node_modules/.bin/bower install --config.interactive=false
{toxinidir}/node_modules/.bin/grunt {posargs}