Merge pull request #4 from zupzup/master

Unit Testing Setup and some tests
pull/5/head
Christoph Oberhofer 11 years ago
commit f3abbeadfd

1
.gitignore vendored

@ -1,4 +1,5 @@
.sass-cache/ .sass-cache/
node_modules/ node_modules/
coverage/
.project .project
_site/ _site/

@ -3,6 +3,11 @@ module.exports = function(grunt) {
// Project configuration. // Project configuration.
grunt.initConfig({ grunt.initConfig({
pkg : grunt.file.readJSON('package.json'), pkg : grunt.file.readJSON('package.json'),
karma: {
unit: {
configFile: 'karma.conf.js'
}
},
uglify : { uglify : {
options : { options : {
banner : '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' banner : '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
@ -61,7 +66,9 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-requirejs'); grunt.loadNpmTasks('grunt-requirejs');
grunt.loadNpmTasks('grunt-karma');
// Default task(s). // Default task(s).
grunt.registerTask('default', ['jshint', 'requirejs', 'uglify']); grunt.registerTask('default', ['jshint', 'requirejs', 'uglify']);
grunt.registerTask('test', ['karma']);
}; };

@ -129,7 +129,21 @@ Quagga.decodeSingle({
}); });
``` ```
## Tests
Unit Tests can be run with [Karma][karmaUrl] and written using [Mocha][mochaUrl], [Chai][chaiUrl] and [SinonJS][sinonUrl]. Coverage reports are automatically generated in the coverage/ folder.
```console
> npm install
> grunt test
```
[zxing_github]: https://github.com/zxing/zxing [zxing_github]: https://github.com/zxing/zxing
[teaser_left]: https://github.com/serratus/quaggaJS/blob/master/doc/img/mobile-located.png [teaser_left]: https://github.com/serratus/quaggaJS/blob/master/doc/img/mobile-located.png
[teaser_right]: https://github.com/serratus/quaggaJS/blob/master/doc/img/mobile-detected.png [teaser_right]: https://github.com/serratus/quaggaJS/blob/master/doc/img/mobile-detected.png
[caniuse_getusermedia]: http://caniuse.com/#feat=stream [caniuse_getusermedia]: http://caniuse.com/#feat=stream
[sinonUrl]: http://sinonjs.org/
[chaiUrl]: http://chaijs.com/
[mochaUrl]: https://github.com/mochajs/mocha
[karmaUrl]: http://karma-runner.github.io/

@ -0,0 +1,29 @@
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'requirejs', 'chai', 'sinon', 'sinon-chai'],
files: [
'test-main.js',
'src/vendor/glMatrix.js',
'src/typedefs.js',
{pattern: 'src/*.js', included: false},
{pattern: 'spec/**/*.js', included: false},
],
exclude: [
],
preprocessors: {
'src/*.js': ['coverage']
},
reporters: ['progress', 'coverage'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['PhantomJS'],
singleRun: false,
coverageReporter: {
type : 'html',
dir : 'coverage/'
}
});
};

@ -8,13 +8,23 @@
"grunt-contrib-jshint": "~0.10.0", "grunt-contrib-jshint": "~0.10.0",
"grunt-contrib-nodeunit": "~0.4.1", "grunt-contrib-nodeunit": "~0.4.1",
"grunt-contrib-uglify": "~0.5.0", "grunt-contrib-uglify": "~0.5.0",
"grunt-requirejs": "^0.4.2" "grunt-karma": "^0.9.0",
"grunt-requirejs": "^0.4.2",
"karma": "latest",
"karma-chai": "latest",
"karma-coverage": "^0.2.7",
"karma-mocha": "latest",
"karma-phantomjs-launcher": "^0.1.4",
"karma-requirejs": "^0.2.2",
"karma-sinon": "^1.0.4",
"karma-sinon-chai": "^0.2.0",
"sinon": "^1.12.1"
}, },
"directories": { "directories": {
"doc": "doc" "doc": "doc"
}, },
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" "test": "karma start"
}, },
"author": "", "author": "",
"license": "ISC" "license": "ISC"

@ -0,0 +1,53 @@
define(['array_helper'], function(ArrayHelper){
describe('init', function() {
it('initializes an array with the given value', function() {
var input = [0, 0, 0];
ArrayHelper.init(input, 5);
expect(input).to.deep.equal([5, 5, 5]);
});
});
describe('shuffle', function() {
before(function() {
sinon.stub(Math, 'random').returns(0.5);
});
after(function() {
sinon.restore(Math);
});
it('shuffles the content of an array', function() {
var input = [1, 2, 3];
expect(ArrayHelper.shuffle(input)).to.deep.equal([3, 1, 2]);
});
});
describe('toPointList', function() {
it('converts an Array to a List of poitns', function() {
var input = [[1, 2], [2, 2], [3, 2]];
expect(ArrayHelper.toPointList(input)).to.equal("[[1,2],\r\n[2,2],\r\n[3,2]]");
});
});
describe('threshold', function() {
it('returns all elements above the given threshold', function() {
var input = [1, 2, 3];
expect(ArrayHelper.threshold(input, 2, function(score) {
return score * 1.5;
})).to.deep.equal([2, 3]);
});
});
describe('maxIndex', function() {
it('gets the index of the biggest element in the array', function() {
var input = [1, 2, 3];
expect(ArrayHelper.maxIndex(input)).to.equal(2);
});
});
describe('max', function() {
it('gets the biggest element in the array', function() {
var input = [1, 3, 2];
expect(ArrayHelper.max(input)).to.equal(3);
});
});
});

@ -0,0 +1,11 @@
define(['cv_utils'], function(CVUtils){
describe('imageRef', function() {
it('gets the image Reference for a coordinate', function() {
var res = CVUtils.imageRef(1, 2);
expect(res.x).to.equal(1);
expect(res.y).to.equal(2);
expect(res.toVec2()[0]).to.equal(1);
});
});
});

@ -0,0 +1,26 @@
var allTestFiles = [];
var TEST_REGEXP = /(spec|test)\.js$/i;
var pathToModule = function(path) {
return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};
Object.keys(window.__karma__.files).forEach(function(file) {
if (TEST_REGEXP.test(file)) {
allTestFiles.push(pathToModule(file));
}
});
require.config({
baseUrl: '/base',
paths: {
'array_helper': 'src/array_helper',
'cv_utils': 'src/cv_utils',
'typedefs': 'src/typedefs',
'glMatrixAddon': 'src/glMatrixAddon',
'cluster': 'src/cluster'
},
deps: allTestFiles,
callback: window.__karma__.start
});
Loading…
Cancel
Save