From 9fc45fc7d7735f96e673ebcc4698bfe9d6facc0b Mon Sep 17 00:00:00 2001 From: Johann-S Date: Thu, 13 Sep 2018 09:42:15 +0200 Subject: [PATCH] refactor karma config in one file --- js/tests/karma-browserstack.conf.js | 51 -------- js/tests/karma-bundle.conf.js | 53 -------- js/tests/karma.conf.js | 196 +++++++++++++++++++--------- package.json | 6 +- 4 files changed, 134 insertions(+), 172 deletions(-) delete mode 100644 js/tests/karma-browserstack.conf.js delete mode 100644 js/tests/karma-bundle.conf.js diff --git a/js/tests/karma-browserstack.conf.js b/js/tests/karma-browserstack.conf.js deleted file mode 100644 index d1c11301be65..000000000000 --- a/js/tests/karma-browserstack.conf.js +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-env node */ -/* eslint no-process-env: 0 */ -const ip = require('ip') -const { - browsers, - browsersKeys -} = require('./browsers') - -module.exports = (config) => { - config.set({ - hostname: ip.address(), - browserStack: { - username: process.env.BROWSER_STACK_USERNAME, - accessKey: process.env.BROWSER_STACK_ACCESS_KEY, - build: `bootstrap-${new Date().toISOString()}`, - project: 'Bootstrap', - retryLimit: 2 - }, - basePath: '../..', - frameworks: ['qunit', 'sinon'], - plugins: [ - 'karma-qunit', - 'karma-sinon', - 'karma-browserstack-launcher' - ], - // list of files / patterns to load in the browser - files: [ - 'site/docs/4.1/assets/js/vendor/jquery-slim.min.js', - 'site/docs/4.1/assets/js/vendor/popper.min.js', - 'js/dist/util.js', - 'js/dist/tooltip.js', - 'js/dist/!(util|index|tooltip).js', // include all of our js/dist files except util.js, index.js and tooltip.js - 'js/tests/unit/*.js' - ], - customLaunchers: browsers, - browsers: browsersKeys, - reporters: ['dots', 'BrowserStack'], - port: 9876, - colors: true, - // 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, - singleRun: true, - concurrency: Infinity, - client: { - qunit: { - showUI: true - } - } - }) -} diff --git a/js/tests/karma-bundle.conf.js b/js/tests/karma-bundle.conf.js deleted file mode 100644 index 50c500faadc2..000000000000 --- a/js/tests/karma-bundle.conf.js +++ /dev/null @@ -1,53 +0,0 @@ -/* eslint-env node */ -/* eslint no-process-env: 0 */ - -module.exports = (config) => { - const jqueryFile = process.env.USE_OLD_JQUERY ? 'https://code.jquery.com/jquery-1.9.1.min.js' : 'site/docs/4.1/assets/js/vendor/jquery-slim.min.js' - - config.set({ - basePath: '../..', - frameworks: ['qunit', 'sinon', 'detectBrowsers'], - plugins: [ - 'karma-chrome-launcher', - 'karma-firefox-launcher', - 'karma-qunit', - 'karma-sinon', - 'karma-detect-browsers' - ], - // list of files / patterns to load in the browser - files: [ - jqueryFile, - 'site/docs/4.1/assets/js/vendor/popper.min.js', - 'dist/js/bootstrap.js', - 'js/tests/unit/*.js' - ], - reporters: ['dots'], - port: 9876, - colors: true, - // 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, - customLaunchers: { - FirefoxHeadless: { - base: 'Firefox', - flags: ['-headless'] - } - }, - singleRun: true, - concurrency: Infinity, - detectBrowsers: { - usePhantomJS: false, - postDetection(availableBrowser) { - if (typeof process.env.TRAVIS_JOB_ID !== 'undefined' || availableBrowser.includes('Chrome')) { - return ['ChromeHeadless'] - } - - if (availableBrowser.includes('Firefox')) { - return ['FirefoxHeadless'] - } - - throw new Error('Please install Firefox or Chrome') - } - } - }) -} diff --git a/js/tests/karma.conf.js b/js/tests/karma.conf.js index 397f8b8e37af..f961fd9fbc50 100644 --- a/js/tests/karma.conf.js +++ b/js/tests/karma.conf.js @@ -1,76 +1,142 @@ /* eslint-env node */ /* eslint no-process-env: 0 */ +const ip = require('ip') +const { + browsers, + browsersKeys +} = require('./browsers') const path = require('path') const jsCoveragePath = path.resolve(__dirname, '../coverage') -module.exports = (config) => { - const jqueryFile = process.env.USE_OLD_JQUERY ? 'https://code.jquery.com/jquery-1.9.1.min.js' : 'site/docs/4.1/assets/js/vendor/jquery-slim.min.js' +const jqueryFile = process.env.USE_OLD_JQUERY ? 'https://code.jquery.com/jquery-1.9.1.min.js' : 'site/docs/4.1/assets/js/vendor/jquery-slim.min.js' +const bundle = process.env.BUNDLE === 'true' +const browserStack = process.env.BROWSER === 'true' - config.set({ - basePath: '../..', - frameworks: ['qunit', 'sinon', 'detectBrowsers'], - plugins: [ - 'karma-chrome-launcher', - 'karma-firefox-launcher', - 'karma-qunit', - 'karma-sinon', - 'karma-detect-browsers', - 'karma-coverage-istanbul-reporter' - ], - // list of files / patterns to load in the browser - files: [ - jqueryFile, - 'site/docs/4.1/assets/js/vendor/popper.min.js', - 'js/coverage/dist/util.js', - 'js/coverage/dist/tooltip.js', - 'js/coverage/dist/!(util|index|tooltip).js', // include all of our js/dist files except util.js, index.js and tooltip.js - 'js/tests/unit/*.js' - ], - reporters: ['dots', 'coverage-istanbul'], - port: 9876, - colors: true, - // 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, - customLaunchers: { - FirefoxHeadless: { - base: 'Firefox', - flags: ['-headless'] - } - }, - singleRun: true, - concurrency: Infinity, - detectBrowsers: { - usePhantomJS: false, - postDetection(availableBrowser) { - if (typeof process.env.TRAVIS_JOB_ID !== 'undefined' || availableBrowser.includes('Chrome')) { - return ['ChromeHeadless'] - } +const frameworks = [ + 'qunit', + 'sinon' +] - if (availableBrowser.includes('Firefox')) { - return ['FirefoxHeadless'] - } +const plugins = [ + 'karma-qunit', + 'karma-sinon' +] - throw new Error('Please install Firefox or Chrome') - } - }, - coverageIstanbulReporter: { - dir: jsCoveragePath, - reports: ['lcov', 'text-summary'], - thresholds: { - emitWarning: false, - global: { - statements: 90, - branches: 84, - functions: 87, - lines: 90 - } - } - }, - client: { - qunit: { - showUI: true +const reporters = ['dots'] + +const detectBrowsers = { + usePhantomJS: false, + postDetection(availableBrowser) { + if (typeof process.env.TRAVIS_JOB_ID !== 'undefined' || availableBrowser.includes('Chrome')) { + return ['ChromeHeadless'] + } + + if (availableBrowser.includes('Firefox')) { + return ['FirefoxHeadless'] + } + + throw new Error('Please install Firefox or Chrome') + } +} + +const customLaunchers = { + FirefoxHeadless: { + base: 'Firefox', + flags: ['-headless'] + } +} + +let files +const conf = { + basePath: '../..', + port: 9876, + colors: true, + autoWatch: false, + singleRun: true, + concurrency: Infinity, + client: { + qunit: { + showUI: true + } + } +} + +if (bundle) { + frameworks.push('detectBrowsers') + plugins.push( + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-detect-browsers' + ) + conf.customLaunchers = customLaunchers + conf.detectBrowsers = detectBrowsers + files = files.concat([ + jqueryFile, + 'site/docs/4.1/assets/js/vendor/popper.min.js', + 'dist/js/bootstrap.js' + ]) +} else if (browserStack) { + conf.hostname = ip.address() + conf.browserStack = { + username: process.env.BROWSER_STACK_USERNAME, + accessKey: process.env.BROWSER_STACK_ACCESS_KEY, + build: `bootstrap-${new Date().toISOString()}`, + project: 'Bootstrap', + retryLimit: 2 + } + plugins.push('karma-browserstack-launcher') + conf.customLaunchers = browsers + conf.browsers = browsersKeys + reporters.push('BrowserStack') + files = files.concat([ + 'site/docs/4.1/assets/js/vendor/jquery-slim.min.js', + 'site/docs/4.1/assets/js/vendor/popper.min.js', + 'js/dist/util.js', + 'js/dist/tooltip.js', + 'js/dist/!(util|index|tooltip).js' // include all of our js/dist files except util.js, index.js and tooltip.js + ]) +} else { + frameworks.push('detectBrowsers') + plugins.push( + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-detect-browsers', + 'karma-coverage-istanbul-reporter' + ) + files = files.concat([ + jqueryFile, + 'site/docs/4.1/assets/js/vendor/popper.min.js', + 'js/coverage/dist/util.js', + 'js/coverage/dist/tooltip.js', + 'js/coverage/dist/!(util|index|tooltip).js' // include all of our js/dist files except util.js, index.js and tooltip.js + ]) + reporters.push('coverage-istanbul') + conf.customLaunchers = customLaunchers + conf.detectBrowsers = detectBrowsers + conf.coverageIstanbulReporter = { + dir: jsCoveragePath, + reports: ['lcov', 'text-summary'], + thresholds: { + emitWarning: false, + global: { + statements: 90, + branches: 84, + functions: 87, + lines: 90 } } - }) + } +} + +files.push('js/tests/unit/*.js') + +conf.frameworks = frameworks +conf.plugins = plugins +conf.reporters = reporters +conf.files = files + +module.exports = (karmaConfig) => { + // possible values: karmaConfig.LOG_DISABLE || karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN || karmaConfig.LOG_INFO || karmaConfig.LOG_DEBUG + conf.logLevel = karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN + karmaConfig.set(conf) } diff --git a/package.json b/package.json index b3423dd5b8a8..c429646e7c46 100644 --- a/package.json +++ b/package.json @@ -53,9 +53,9 @@ "js-test": "npm-run-all js-test-karma*", "js-test-karma": "karma start js/tests/karma.conf.js", "js-test-karma-old": "cross-env USE_OLD_JQUERY=true npm run js-test-karma", - "js-test-karma-bundle": "cross-env karma start js/tests/karma-bundle.conf.js", - "js-test-karma-bundle-old": "cross-env USE_OLD_JQUERY=true npm run js-test-karma-bundle", - "js-test-cloud": "karma start js/tests/karma-browserstack.conf.js", + "js-test-karma-bundle": "cross-env BUNDLE=true npm run js-test-karma", + "js-test-karma-bundle-old": "cross-env BUNDLE=true USE_OLD_JQUERY=true npm run js-test-karma", + "js-test-cloud": "cross-env BROWSER=true npm run js-test-karma", "coveralls": "shx cat js/coverage/lcov.info | coveralls", "docs": "npm-run-all --parallel css-docs js-docs --sequential docs-compile docs-lint", "docs-compile": "bundle exec jekyll build",