diff --git a/test/karma.conf.js b/test/karma.conf.js index 28d2a77..d1d4a0b 100644 --- a/test/karma.conf.js +++ b/test/karma.conf.js @@ -1,38 +1,32 @@ // @flow weak - const path = require('path'); -const argv = process.argv.slice(2); -const opts = { - grep: undefined, - coverage: true, +const browserStack = { + username: process.env.BROWSERSTACK_USERNAME, + accessKey: process.env.BROWSERSTACK_ACCESS_KEY, + build: `resonance-${(new Date()).toISOString()}`, }; -argv.forEach((arg) => { - if (/^--grep=/.test(arg)) { - opts.grep = arg.replace('--grep=', '').trim(); - opts.coverage = false; - } -}); - // Karma configuration -module.exports = function createConfig(config) { - config.set({ - autoWatch: false, +module.exports = function setKarmaConfig(config) { + const baseConfig = { basePath: '../', - browsers: ['PhantomJS_Sized'], - client: { - mocha: { - grep: opts.grep, - }, - }, + browsers: [ + 'PhantomJS_Sized', + ], + // to avoid DISCONNECTED messages on travis + browserDisconnectTimeout: 60000, // default 2000 + browserDisconnectTolerance: 1, // default 0 + browserNoActivityTimeout: 300000, // default 10000 colors: true, - frameworks: ['mocha'], + frameworks: [ + 'mocha', + ], files: [ 'node_modules/babel-polyfill/dist/polyfill.js', { pattern: 'test/karma.tests.js', - watched: false, + watched: true, served: true, included: true, }, @@ -44,30 +38,32 @@ module.exports = function createConfig(config) { 'karma-webpack', 'karma-mocha-reporter', ], - // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG + /** + * possible values: + * - config.LOG_DISABLE + * - config.LOG_ERROR + * - config.LOG_WARN + * - config.LOG_INFO + * - config.LOG_DEBUG + */ logLevel: config.LOG_INFO, port: 9876, preprocessors: { 'test/karma.tests.js': ['webpack', 'sourcemap'], }, reporters: ['dots'], - singleRun: false, webpack: { devtool: 'inline-source-map', module: { - loaders: [ + rules: [ { test: /\.js$/, - loader: 'babel', + loader: 'babel-loader', exclude: /node_modules/, query: { cacheDirectory: true, }, }, - { - test: /\.json$/, - loader: 'json', - }, ], noParse: [ /node_modules\/sinon\//, @@ -78,10 +74,10 @@ module.exports = function createConfig(config) { resonance: path.resolve(__dirname, '../src'), sinon: 'sinon/pkg/sinon.js', }, - extensions: ['', '.js', '.jsx', '.json'], - modulesDirectories: [ + extensions: ['.js'], + modules: [ + path.join(__dirname, '../'), 'node_modules', - './', ], }, externals: { @@ -91,6 +87,9 @@ module.exports = function createConfig(config) { 'text-encoding': 'window', 'react/addons': true, // For enzyme }, + node: { + fs: 'empty', + }, }, webpackServer: { noInfo: true, @@ -106,5 +105,52 @@ module.exports = function createConfig(config) { }, }, }, - }); + }; + + let newConfig = baseConfig; + + if (browserStack.accessKey) { + newConfig = Object.assign({}, baseConfig, { + browserStack, + browsers: baseConfig.browsers.concat([ + 'BrowserStack_Chrome', + 'BrowserStack_Firefox', + 'BrowserStack_Safari', + // 'BrowserStack_IE', + ]), + plugins: baseConfig.plugins.concat(['karma-browserstack-launcher']), + customLaunchers: Object.assign({}, baseConfig.customLaunchers, { + BrowserStack_Chrome: { + base: 'BrowserStack', + os: 'OS X', + os_version: 'Sierra', + browser: 'chrome', + browser_version: 'latest', + }, + BrowserStack_Firefox: { + base: 'BrowserStack', + os: 'Windows', + os_version: '10', + browser: 'firefox', + browser_version: 'latest', + }, + BrowserStack_Safari: { + base: 'BrowserStack', + os: 'OS X', + os_version: 'Yosemite', + browser: 'safari', + browser_version: 'latest', + }, + // BrowserStack_IE: { + // base: 'BrowserStack', + // os: 'Windows', + // os_version: '10', + // browser: 'edge', + // browser_version: 'latest', + // }, + }), + }); + } + + config.set(newConfig); };