Fixed unit test scripts + coverage

Tried to add more apps (others break).
"preprocessors" is now populated automatically based on the tested apps.
This commit is contained in:
Vincent Petry 2014-01-27 21:15:21 +01:00
parent 9fa788c452
commit f7ac9f8069
4 changed files with 73 additions and 37 deletions

1
.gitignore vendored
View File

@ -88,6 +88,7 @@ nbproject
# Tests - auto-generated files # Tests - auto-generated files
/data-autotest /data-autotest
/tests/coverage* /tests/coverage*
/tests/karma-coverage
/tests/autoconfig* /tests/autoconfig*
/tests/autotest* /tests/autotest*
/tests/data/lorem-copy.txt /tests/data/lorem-copy.txt

View File

@ -33,5 +33,5 @@ then
exit 2 exit 2
fi fi
KARMA_TESTSUITE="$1" $KARMA start tests/karma.config.js --single-run NODE_PATH='build/node_modules' KARMA_TESTSUITE="$1" $KARMA start tests/karma.config.js --single-run

View File

@ -1,28 +1,23 @@
{ {
"libraries": [
"jquery-1.10.0.min.js",
"jquery-migrate-1.2.1.min.js",
"jquery-ui-1.10.0.custom.js",
"jquery-showpassword.js",
"jquery.infieldlabel.js",
"jquery.placeholder.js",
"jquery-tipsy.js"
],
"modules": [ "modules": [
"jquery-1.10.0.min.js", "compatibility.js",
"jquery-migrate-1.2.1.min.js", "jquery.ocdialog.js",
"jquery-ui-1.10.0.custom.js", "oc-dialogs.js",
"jquery-showpassword.js", "js.js",
"jquery.infieldlabel.js", "octemplate.js",
"jquery.placeholder.js", "eventsource.js",
"jquery-tipsy.js", "config.js",
"compatibility.js", "multiselect.js",
"jquery.ocdialog.js", "router.js",
"oc-dialogs.js", "oc-requesttoken.js"
"js.js",
"octemplate.js",
"eventsource.js",
"config.js",
"multiselect.js",
"search.js",
"router.js",
"oc-requesttoken.js",
"styles.js",
"apps.js",
"fixes.js",
"jquery-ui-2.10.0.custom.js",
"jquery-tipsy.js",
"jquery.ocdialog.js"
] ]
} }

View File

@ -29,25 +29,52 @@
* environment variable to the apps name, for example "core" or "files_encryption". * environment variable to the apps name, for example "core" or "files_encryption".
* Multiple apps can be specified by separating them with space. * Multiple apps can be specified by separating them with space.
* *
* Setting the environment variable NOCOVERAGE to 1 will disable the coverage
* preprocessor, which is needed to be able to debug tests properly in a browser.
*/ */
/* jshint node: true */
module.exports = function(config) { module.exports = function(config) {
function findApps() {
/*
var fs = require('fs');
var apps = fs.readdirSync('apps');
return apps;
*/
// other apps tests don't run yet... needs further research / clean up
return ['files'];
}
// respect NOCOVERAGE env variable
// it is useful to disable coverage for debugging
// because the coverage preprocessor will wrap the JS files somehow
var enableCoverage = !parseInt(process.env.NOCOVERAGE, 10);
console.log('Coverage preprocessor: ', enableCoverage?'enabled':'disabled');
// default apps to test when none is specified (TODO: read from filesystem ?) // default apps to test when none is specified (TODO: read from filesystem ?)
var defaultApps = 'core files'; var appsToTest = process.env.KARMA_TESTSUITE;
var appsToTest = process.env.KARMA_TESTSUITE || defaultApps; if (appsToTest) {
appsToTest = appsToTest.split(' ');
}
else {
appsToTest = ['core'].concat(findApps());
}
console.log('Apps to test: ', appsToTest);
// read core files from core.json, // read core files from core.json,
// these are required by all apps so always need to be loaded // these are required by all apps so always need to be loaded
// note that the loading order is important that's why they // note that the loading order is important that's why they
// are specified in a separate file // are specified in a separate file
var corePath = 'core/js/'; var corePath = 'core/js/';
var coreFiles = require('../' + corePath + 'core.json').modules; var coreModule = require('../' + corePath + 'core.json');
var testCore = false; var testCore = false;
var files = []; var files = [];
var index; var index;
var preprocessors = {};
// find out what apps to test from appsToTest // find out what apps to test from appsToTest
appsToTest = appsToTest.split(' ');
index = appsToTest.indexOf('core'); index = appsToTest.indexOf('core');
if (index > -1) { if (index > -1) {
appsToTest.splice(index, 1); appsToTest.splice(index, 1);
@ -60,11 +87,23 @@ module.exports = function(config) {
// core mocks // core mocks
files.push(corePath + 'tests/specHelper.js'); files.push(corePath + 'tests/specHelper.js');
// add core files // add core library files
for ( var i = 0; i < coreFiles.length; i++ ) { for ( var i = 0; i < coreModule.libraries.length; i++ ) {
files.push( corePath + coreFiles[i] ); var srcFile = corePath + coreModule.libraries[i];
files.push(srcFile);
} }
// add core modules files
for ( var i = 0; i < coreModule.modules.length; i++ ) {
var srcFile = corePath + coreModule.modules[i];
files.push(srcFile);
if (enableCoverage) {
preprocessors[srcFile] = 'coverage';
}
}
// TODO: settings pages
// need to test the core app as well ? // need to test the core app as well ?
if (testCore) { if (testCore) {
// core tests // core tests
@ -73,7 +112,11 @@ module.exports = function(config) {
for ( var i = 0; i < appsToTest.length; i++ ) { for ( var i = 0; i < appsToTest.length; i++ ) {
// add app JS // add app JS
files.push('apps/' + appsToTest[i] + '/js/*.js'); var srcFile = 'apps/' + appsToTest[i] + '/js/*.js';
files.push(srcFile);
if (enableCoverage) {
preprocessors[srcFile] = 'coverage';
}
// add test specs // add test specs
files.push('apps/' + appsToTest[i] + '/tests/js/*.js'); files.push('apps/' + appsToTest[i] + '/tests/js/*.js');
} }
@ -83,7 +126,6 @@ module.exports = function(config) {
// base path, that will be used to resolve files and exclude // base path, that will be used to resolve files and exclude
basePath: '..', basePath: '..',
// frameworks to use // frameworks to use
frameworks: ['jasmine'], frameworks: ['jasmine'],
@ -106,9 +148,7 @@ module.exports = function(config) {
// web server port // web server port
port: 9876, port: 9876,
preprocessors: { preprocessors: preprocessors,
'apps/files/js/*.js': 'coverage'
},
coverageReporter: { coverageReporter: {
dir:'tests/karma-coverage', dir:'tests/karma-coverage',