let isDebug = false; if ( process.argv[ process.argv.length - 1 ] ) { const gruntParams = process.argv[ process.argv.length - 1 ].split( ':' ); if ( gruntParams ) { if ( 'karma' === gruntParams[ 0 ] ) { if ( 'debug' === gruntParams[ 1 ] ) { isDebug = true; } } } } // Read package.json const packageJson = require( './package.json' ); module.exports = function( config ) { const karmaConfig = { basePath: './', frameworks: [ 'qunit' ], files: [ { pattern: 'assets/js/**/*.js.map', included: false, }, // Base Libraries. 'tests/qunit/vendor/wp-includes/jquery.js', 'tests/qunit/vendor/wp-includes/underscore.min.js', 'tests/qunit/vendor/wp-includes/backbone.min.js', 'tests/qunit/vendor/wp-includes/react.min.js', 'tests/qunit/vendor/wp-includes/react-dom.min.js', 'tests/qunit/vendor/wp-includes/i18n.min.js', 'assets/lib/backbone/backbone.marionette.min.js', 'assets/lib/backbone/backbone.radio.min.js', // Dev tools. 'tests/qunit/setup/dev-tools.js', 'assets/js/dev-tools.js', // Elementor Common. 'tests/qunit/setup/elementor-common.js', 'tests/qunit/setup/web-cli.js', 'assets/lib/dialog/dialog.js', 'assets/js/common-modules.min.js', 'assets/js/web-cli.min.js', 'assets/js/common.min.js', // Editor Fixtures. 'tests/qunit/index.html', // Editor Tinymce. 'tests/qunit/setup/tinymce.js', 'tests/qunit/vendor/wp-includes/quicktags.min.js', // Editor Config. 'tests/qunit/setup/editor.js', // Editor Dependencies. 'tests/qunit/vendor/wp-includes/jquery-ui.min.js', 'assets/lib/tipsy/tipsy.min.js', 'assets/lib/perfect-scrollbar/js/perfect-scrollbar.min.js', 'assets/lib/nouislider/nouislider.min.js', 'assets/lib/imagesloaded/imagesloaded.min.js', 'assets/dev/js/editor/utils/jquery-serialize-object.js', 'assets/dev/js/editor/utils/jquery-html5-dnd.js', 'assets/lib/jquery-hover-intent/jquery-hover-intent.min.js', // Editor. 'assets/js/editor-modules.min.js', 'assets/js/editor-document.min.js', // Tests. 'assets/js/qunit-tests.min.js', ], preprocessors: { 'tests/qunit/index.html': [ 'html2js' ], 'assets/js/common-modules.js': [ 'coverage' ], 'assets/js/common.js': [ 'coverage' ], 'assets/js/editor-document.js': [ 'coverage' ], }, reporters: [ 'progress' ], coverageIstanbulReporter: { reports: [ 'text' ], fixWebpackSourcePaths: true, // Enforce percentage thresholds // anything under these percentages will cause karma to fail with an exit code of 1 if not running in watch mode thresholds: { emitWarning: false, // Set to `true` to not fail the test command when thresholds are not met // thresholds for all files global: { statements: 50, /* TEMP: initial value */ lines: 55, /* TEMP: initial value */ branches: 25, /* TEMP: initial value */ functions: 55, /* TEMP: initial value */ }, }, }, // Web server port port: 9876, colors: true, logLevel: config.LOG_INFO, browsers: [ 'ChromeHeadlessCustom', 'ChromeHeadless' ], customLaunchers: { ChromeHeadlessCustom: { base: 'ChromeHeadless', flags: [ '--no-sandbox', '--single-process' ], }, }, browserDisconnectTimeout: 6000, pingTimeout: 10000, // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true, // Client configuration client: { clearContext: true, qunit: { elementorVersion: packageJson.version, isDebug, showUI: false, validateContainersAlive: true, // Validate all containers are alive recursively after each test done. testTimeout: 5000, }, }, }; if ( isDebug ) { const fs = require( 'fs' ); if ( fs.existsSync( '../elementor-dev-tools' ) ) { const last = karmaConfig.files.pop(); karmaConfig.files.push( { pattern: '../elementor-dev-tools/assets/js/editor.js', type: 'module' } ); karmaConfig.files.push( last ); } } config.set( karmaConfig ); };