diff --git a/karma.conf.js b/karma.conf.js index dc606cbbb4b6..2ea41e26c609 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,16 +1,14 @@ module.exports = function (config) { const jqueryFile = process.env.USE_OLD_JQUERY === 'true' ? 'js/tests/vendor/jquery-1.9.1.min.js' : 'assets/js/vendor/jquery-slim.min.js' - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - const browsers = ['ChromeHeadless', 'FirefoxHeadless'] - // if we run our test on Travis we just use ChromeHeadless because Firefox isn't well supported - if (typeof process.env.TRAVIS_JOB_ID !== 'undefined') { - browsers.pop() - } - config.set({ - frameworks: ['qunit'], - plugins: ['karma-chrome-launcher', 'karma-firefox-launcher', 'karma-qunit'], + frameworks: ['qunit', 'detectBrowsers'], + plugins: [ + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-qunit', + 'karma-detect-browsers' + ], // list of files / patterns to load in the browser files: [ jqueryFile, @@ -26,7 +24,6 @@ module.exports = function (config) { // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_ERROR || config.LOG_WARN, autoWatch: false, - browsers, customLaunchers: { FirefoxHeadless: { base: 'Firefox', @@ -34,6 +31,20 @@ module.exports = function (config) { }, }, singleRun: true, - concurrency: Infinity + concurrency: Infinity, + detectBrowsers: { + usePhantomJS: false, + postDetection: function (availableBrowser) { + if (typeof process.env.TRAVIS_JOB_ID !== 'undefined' || availableBrowser.indexOf('Chrome') !== -1) { + return ['ChromeHeadless'] + } + + if (availableBrowser.indexOf('Firefox') !== -1) { + return ['FirefoxHeadless'] + } + + throw new Error('Please install Firefox or Chrome') + } + } }) } diff --git a/package-lock.json b/package-lock.json index 19647eac0748..3858198a0cc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3882,6 +3882,15 @@ "which": "1.3.0" } }, + "karma-detect-browsers": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/karma-detect-browsers/-/karma-detect-browsers-2.2.6.tgz", + "integrity": "sha512-nJ9ZhsIf72FJN1bt+pk1JmVf9TcEzsMNe61K42gGhAhJRS+5dTpwz/R26TiCai/2o84ti4jOMb0jdhAuVbUmJQ==", + "dev": true, + "requires": { + "which": "1.3.0" + } + }, "karma-firefox-launcher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz", @@ -6765,6 +6774,15 @@ "duplexer": "0.1.1" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -6803,15 +6821,6 @@ "function-bind": "1.1.1" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", diff --git a/package.json b/package.json index 7f095119fa6b..08eb7b6fcada 100644 --- a/package.json +++ b/package.json @@ -95,6 +95,7 @@ "jsunitsaucelabs": "^1.3.0", "karma": "^1.7.1", "karma-chrome-launcher": "^2.2.0", + "karma-detect-browsers": "^2.2.6", "karma-firefox-launcher": "^1.0.1", "karma-qunit": "^1.2.1", "node-sass": "^4.6.1",