mirror of
https://github.com/serratus/quaggaJS.git
synced 2026-08-12 21:21:42 +08:00
add basic test setup with karma, mocha, chai and sinon
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
.sass-cache/
|
||||
node_modules/
|
||||
coverage/
|
||||
.project
|
||||
_site/
|
||||
|
||||
@@ -129,7 +129,16 @@ Quagga.decodeSingle({
|
||||
});
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
Unit Tests can be run with Karma and written using Mocha, Chai and SinonJS. Coverage reports are automatically generated in coverage/.
|
||||
|
||||
```console
|
||||
> npm install
|
||||
> npm test
|
||||
```
|
||||
|
||||
[zxing_github]: https://github.com/zxing/zxing
|
||||
[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
|
||||
[caniuse_getusermedia]: http://caniuse.com/#feat=stream
|
||||
[caniuse_getusermedia]: http://caniuse.com/#feat=stream
|
||||
|
||||
@@ -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/'
|
||||
}
|
||||
});
|
||||
};
|
||||
+11
-2
@@ -8,13 +8,22 @@
|
||||
"grunt-contrib-jshint": "~0.10.0",
|
||||
"grunt-contrib-nodeunit": "~0.4.1",
|
||||
"grunt-contrib-uglify": "~0.5.0",
|
||||
"grunt-requirejs": "^0.4.2"
|
||||
"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": {
|
||||
"doc": "doc"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"test": "./node_modules/karma/bin/karma start"
|
||||
},
|
||||
"author": "",
|
||||
"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
|
||||
});
|
||||
Reference in New Issue
Block a user