From 350214c6093bbd300102a364f20caa91d23d5fb9 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Sun, 12 Jan 2014 18:57:53 +0100 Subject: Added Javascript unit tests - added karma utility to run jasmine unit tests - added Sinon library (for stubs/mocks/fakeserver) - added a few unit tests for core and files - added autotest-js.sh script --- tests/karma.config.js | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 tests/karma.config.js (limited to 'tests') diff --git a/tests/karma.config.js b/tests/karma.config.js new file mode 100644 index 00000000000..cb2d261a4fb --- /dev/null +++ b/tests/karma.config.js @@ -0,0 +1,138 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2014 Vincent Petry +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + +/** + * This node module is run by the karma executable to specify its configuration. + * + * The list of files from all needed JavaScript files including the ones from the + * apps to test, and the test specs will be passed as configuration object. + * + * Note that it is possible to test a single app by setting the KARMA_TESTSUITE + * environment variable to the apps name, for example "core" or "files_encryption". + * Multiple apps can be specified by separating them with space. + * + */ +module.exports = function(config) { + + // default apps to test when none is specified (TODO: read from filesystem ?) + var defaultApps = 'core files'; + var appsToTest = process.env.KARMA_TESTSUITE || defaultApps; + + // read core files from core.json, + // these are required by all apps so always need to be loaded + // note that the loading order is important that's why they + // are specified in a separate file + var corePath = 'core/js/'; + var coreFiles = require('../' + corePath + 'core.json').modules; + var testCore = false; + var files = []; + var index; + + // find out what apps to test from appsToTest + appsToTest = appsToTest.split(' '); + index = appsToTest.indexOf('core'); + if (index > -1) { + appsToTest.splice(index, 1); + testCore = true; + } + + // extra test libs + files.push(corePath + 'tests/lib/sinon-1.7.3.js'); + + // core mocks + files.push(corePath + 'tests/specHelper.js'); + + // add core files + for ( var i = 0; i < coreFiles.length; i++ ) { + files.push( corePath + coreFiles[i] ); + } + + // need to test the core app as well ? + if (testCore) { + // core tests + files.push(corePath + 'tests/specs/*.js'); + } + + for ( var i = 0; i < appsToTest.length; i++ ) { + // add app JS + files.push('apps/' + appsToTest[i] + '/js/*.js'); + // add test specs + files.push('apps/' + appsToTest[i] + '/tests/js/*.js'); + } + + config.set({ + + // base path, that will be used to resolve files and exclude + basePath: '..', + + + // frameworks to use + frameworks: ['jasmine'], + + // list of files / patterns to load in the browser + files: files, + + // list of files to exclude + exclude: [ + + ], + + // test results reporter to use + // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' + reporters: ['dots', 'junit'], + + junitReporter: { + outputFile: 'tests/autotest-results-js.xml' + }, + + // 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, currently available: + // - Chrome + // - ChromeCanary + // - Firefox + // - Opera (has to be installed with `npm install karma-opera-launcher`) + // - Safari (only Mac; has to be installed with `npm install karma-safari-launcher`) + // - PhantomJS + // - IE (only Windows; has to be installed with `npm install karma-ie-launcher`) + browsers: ['PhantomJS'], + + // If browser does not capture in given timeout [ms], kill it + captureTimeout: 60000, + + // Continuous Integration mode + // if true, it capture browsers, run tests and exit + singleRun: false + }); +}; -- cgit v1.2.3 From f29bd1cb0b839f81bed0b87ae7900da2b1d0e474 Mon Sep 17 00:00:00 2001 From: Thomas Müller Date: Tue, 21 Jan 2014 00:57:18 +0100 Subject: adding code coverage support --- build/package.json | 3 ++- tests/karma.config.js | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/build/package.json b/build/package.json index 238ea6881a5..c9ed7b96c6c 100644 --- a/build/package.json +++ b/build/package.json @@ -13,7 +13,8 @@ "devDependencies": { "karma": "*", "karma-jasmine": "*", - "karma-junit-reporter": "*" + "karma-junit-reporter": "*", + "karma-coverage": "*" }, "engine": "node >= 0.8" } diff --git a/tests/karma.config.js b/tests/karma.config.js index cb2d261a4fb..f73ade0f3c6 100644 --- a/tests/karma.config.js +++ b/tests/karma.config.js @@ -97,7 +97,7 @@ module.exports = function(config) { // test results reporter to use // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' - reporters: ['dots', 'junit'], + reporters: ['dots', 'junit', 'coverage'], junitReporter: { outputFile: 'tests/autotest-results-js.xml' @@ -106,6 +106,17 @@ module.exports = function(config) { // web server port port: 9876, + preprocessors: { + 'apps/files/js/*.js': 'coverage' + }, + + coverageReporter: { + dir:'tests/karma-coverage', + reporters: [ + { type: 'html' }, + { type: 'cobertura' } + ] + }, // enable / disable colors in the output (reporters and logs) colors: true, -- cgit v1.2.3