diff options
Diffstat (limited to 'tests/karma.config.js')
-rw-r--r-- | tests/karma.config.js | 285 |
1 files changed, 90 insertions, 195 deletions
diff --git a/tests/karma.config.js b/tests/karma.config.js index 111af7a1559..92361408dcd 100644 --- a/tests/karma.config.js +++ b/tests/karma.config.js @@ -1,23 +1,8 @@ /** -* ownCloud -* -* @author Vincent Petry -* @copyright 2014 Vincent Petry <pvince81@owncloud.com> -* -* 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 <http://www.gnu.org/licenses/>. -* -*/ + * SPDX-FileCopyrightText: 2016-2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2014-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later + */ /** * This node module is run by the karma executable to specify its configuration. @@ -33,150 +18,49 @@ * preprocessor, which is needed to be able to debug tests properly in a browser. */ +if (!process.env.CHROMIUM_BIN) { + const chrome = require('puppeteer').executablePath() + process.env.CHROMIUM_BIN = chrome +} + /* jshint node: true */ 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', - 'files_trashbin', - { - name: 'files_sharing', - srcFiles: [ - // only test these files, others are not ready and mess - // up with the global namespace/classes/state - 'apps/files_sharing/js/app.js', - 'apps/files_sharing/js/sharedfilelist.js', - 'apps/files_sharing/js/share.js', - 'apps/files_sharing/js/external.js', - 'apps/files_sharing/js/public.js', - 'apps/files_sharing/js/sharetabview.js' - ], - testFiles: ['apps/files_sharing/tests/js/*.js'] - }, - { - name: 'files_external', - srcFiles: [ - // only test these files, others are not ready and mess - // up with the global namespace/classes/state - 'apps/files_external/js/app.js', - 'apps/files_external/js/mountsfilelist.js', - 'apps/files_external/js/settings.js', - 'apps/files_external/js/statusmanager.js' - ], - testFiles: ['apps/files_external/tests/js/*.js'] - }, - { - name: 'files_versions', - srcFiles: [ - // need to enforce loading order... - 'apps/files_versions/js/versionmodel.js', - 'apps/files_versions/js/versioncollection.js', - 'apps/files_versions/js/versionstabview.js' - ], - testFiles: ['apps/files_versions/tests/js/**/*.js'] - }, - { - name: 'comments', - srcFiles: [ - // need to enforce loading order... - 'apps/comments/js/app.js', - 'apps/comments/js/commentmodel.js', - 'apps/comments/js/commentcollection.js', - 'apps/comments/js/commentsummarymodel.js', - 'apps/comments/js/commentstabview.js', - 'apps/comments/js/filesplugin.js' - ], - testFiles: ['apps/comments/tests/js/**/*.js'] - }, - { - name: 'systemtags', - srcFiles: [ - // need to enforce loading order... - 'apps/systemtags/js/app.js', - 'apps/systemtags/js/systemtagsinfoview.js', - 'apps/systemtags/js/systemtagsfilelist.js', - 'apps/systemtags/js/filesplugin.js' - ], - testFiles: ['apps/systemtags/tests/js/**/*.js'] - }, - { - name: 'settings', - srcFiles: [ - 'settings/js/apps.js', - 'settings/js/users/deleteHandler.js' - ], - testFiles: [ - 'settings/tests/js/appsSpec.js', - 'settings/tests/js/users/deleteHandlerSpec.js' - ] - } - ]; - } - // 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 ?) - var appsToTest = process.env.KARMA_TESTSUITE; - if (appsToTest) { - appsToTest = appsToTest.split(' '); - } - else { - appsToTest = ['core'].concat(findApps()); - } - - console.log('Apps to test: ', appsToTest); + console.log( + 'Coverage preprocessor: ', + enableCoverage ? 'enabled' : 'disabled' + ); // 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 vendorPath = 'core/vendor/'; - var coreModule = require('../' + corePath + 'core.json'); - var testCore = false; - var files = []; - var index; + var corePath = 'dist/'; + var coreModule = require('../core/js/core.json'); + var files = [ + // core mocks + 'core/js/tests/specHelper.js', + ]; var preprocessors = {}; - // find out what apps to test from appsToTest - index = appsToTest.indexOf('core'); - if (index > -1) { - appsToTest.splice(index, 1); - testCore = true; - } - - // extra test libs - files.push(corePath + 'tests/lib/sinon-1.15.4.js'); - - // core mocks - files.push(corePath + 'tests/specHelper.js'); - var srcFile, i; - // add vendor library files - for ( i = 0; i < coreModule.vendor.length; i++ ) { - srcFile = vendorPath + coreModule.vendor[i]; - files.push(srcFile); - } - // add core library files - for ( i = 0; i < coreModule.libraries.length; i++ ) { + for (i = 0; i < coreModule.libraries.length; i++) { srcFile = corePath + coreModule.libraries[i]; files.push(srcFile); } + files.push('core/js/tests/html-domparser.js'); + files.push('dist/core-main.js'); + files.push('dist/core-files_fileinfo.js'); + files.push('dist/core-files_client.js'); + files.push('dist/core-systemtags.js'); + // add core modules files - for ( i = 0; i < coreModule.modules.length; i++ ) { + for (i = 0; i < coreModule.modules.length; i++) { srcFile = corePath + coreModule.modules[i]; files.push(srcFile); if (enableCoverage) { @@ -184,72 +68,69 @@ module.exports = function(config) { } } - // TODO: settings pages - - // need to test the core app as well ? - if (testCore) { - // core tests - files.push(corePath + 'tests/specs/**/*.js'); - } - - function addApp(app) { - // if only a string was specified, expand to structure - if (typeof(app) === 'string') { - app = { - srcFiles: 'apps/' + app + '/js/**/*.js', - testFiles: 'apps/' + app + '/tests/js/**/*.js' - }; - } - - // add source files/patterns - files = files.concat(app.srcFiles || []); - // add test files/patterns - files = files.concat(app.testFiles || []); - if (enableCoverage) { - // add coverage entry for each file/pattern - for (var i = 0; i < app.srcFiles.length; i++) { - preprocessors[app.srcFiles[i]] = 'coverage'; - } - } - } - - // add source files for apps to test - for ( i = 0; i < appsToTest.length; i++ ) { - addApp(appsToTest[i]); - } - + // core tests + files.push('core/js/tests/specs/**/*.js'); // serve images to avoid warnings - files.push({pattern: 'core/img/**/*', watched: false, included: false, served: true}); - + files.push({ + pattern: 'core/img/**/*', + watched: false, + included: false, + served: true + }); + // include core CSS - files.push({pattern: 'core/css/*.css', watched: true, included: true, served: true}); + files.push({ + pattern: 'core/css/*.css', + watched: true, + included: true, + served: true + }); + + // Allow fonts + files.push({ + pattern: 'core/fonts/*', + watched: false, + included: false, + served: true + }); + + console.log(files) config.set({ - // base path, that will be used to resolve files and exclude basePath: '..', // frameworks to use - frameworks: ['jasmine'], + frameworks: ['jasmine', 'jasmine-sinon', 'viewport'], // list of files / patterns to load in the browser - files: files, + files, // list of files to exclude - exclude: [ - - ], + exclude: [], proxies: { // prevent warnings for images - '/context.html//core/img/': 'http://localhost:9876/base/core/img/', - '/context.html//core/css/': 'http://localhost:9876/base/core/css/', - '/context.html//core/fonts/': 'http://localhost:9876/base/core/fonts/' + '/base/tests/img/': 'http://localhost:9876/base/core/img/', + '/base/tests/css/': 'http://localhost:9876/base/core/css/', + '/base/core/css/images/': 'http://localhost:9876/base/core/css/images/', + '/actions/': 'http://localhost:9876/base/core/img/actions/', + '/base/core/fonts/': 'http://localhost:9876/base/core/fonts/', + '/svg/': '../core/img/' }, // test results reporter to use // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' - reporters: ['dots', 'junit', 'coverage'], + reporters: ['spec'], + + specReporter: { + maxLogLines: 5, + suppressErrorSummary: false, + suppressFailed: false, + suppressPassed: true, + suppressSkipped: true, + showSpecTiming: false, + }, junitReporter: { outputFile: 'tests/autotest-results-js.xml' @@ -261,17 +142,17 @@ module.exports = function(config) { preprocessors: preprocessors, coverageReporter: { - dir:'tests/karma-coverage', + dir: 'tests/karma-coverage', reporters: [ { type: 'html' }, - { type: 'cobertura' } + { type: 'cobertura' }, + { type: 'lcovonly' } ] }, // 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, @@ -287,7 +168,21 @@ module.exports = function(config) { // - 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'], + // use PhantomJS_debug for extra local debug + browsers: ['Chrome_without_sandbox'], + + // you can define custom flags + customLaunchers: { + PhantomJS_debug: { + base: 'PhantomJS', + debug: true + }, + // fix CI + Chrome_without_sandbox: { + base: 'ChromiumHeadless', + flags: ['--no-sandbox'], + }, + }, // If browser does not capture in given timeout [ms], kill it captureTimeout: 60000, @@ -295,5 +190,5 @@ module.exports = function(config) { // Continuous Integration mode // if true, it capture browsers, run tests and exit singleRun: false - }); + }); }; |