UNPKG

six-widget-buildsupport

Version:

SIX Widgets buildsupport

208 lines (199 loc) 5.91 kB
const path = require('path'); const fs = require('fs'); const packageDir = path.resolve('.'); const packageObject = JSON.parse(fs.readFileSync('package.json', 'utf8')); const customLaunchers = {}; let customBrowsers = []; if (packageObject.config && packageObject.config.browsers) { packageObject.config.browsers.forEach(b => { customBrowsers.push(b); }); } if (process.env.BROWSER_STACK_USERNAME) { console.log(`Browserstack username detected: ${process.env.BROWSER_STACK_USERNAME}`); customBrowsers = customBrowsers.concat([ // android v5 plus is bugged with bs automate 'bs_android5', 'bs_iphone_se9', 'bs_firefox_latest_win10', 'bs_ie_latest_win10', 'bs_chrome_latest_win7', 'bs_edge_latest_win10', 'bs_ie_10_windows', 'bs_safari_9_mac', 'bs_safari_10_mac', ]); Object.assign(customLaunchers, { bs_firefox_latest_win10: { base: 'BrowserStack', browser: 'firefox', os: 'Windows', os_version: '10', }, bs_edge_latest_win10: { base: 'BrowserStack', browser: 'edge', os: 'Windows', os_version: '10', }, bs_chrome_latest_win7: { base: 'BrowserStack', browser: 'chrome', os: 'Windows', os_version: '7', }, bs_ie_latest_win10: { base: 'BrowserStack', browser: 'ie', os: 'Windows', os_version: '10', }, bs_firefox_mac: { base: 'BrowserStack', browser: 'firefox', os: 'OS X', os_version: 'Mountain Lion', }, bs_safari_10_mac: { base: 'BrowserStack', browser: 'safari', browser_version: '10', os: 'OS X', os_version: 'Sierra', }, bs_safari_9_mac: { base: 'BrowserStack', browser: 'safari', browser_version: '9.1', os: 'OS X', os_version: 'El Capitan', }, bs_ie_10_windows: { base: 'BrowserStack', browser: 'ie', browser_version: '10', os: 'Windows', os_version: '8', }, bs_iphone_se9: { base: 'BrowserStack', "device": "iPhone 6S", "os": "ios", "os_version": "9.1", }, bs_android5: { base: 'BrowserStack', device: 'Google Nexus 5', os: 'android', os_version: '5.0', }, }); } let enableDetectBrowsers = customBrowsers.length < 1; if (packageObject.config !== undefined && packageObject.config.detectBrowsers !== undefined) { enableDetectBrowsers = packageObject.config.detectBrowsers; } console.log(`detect browsers: ${enableDetectBrowsers}, number of custom browsers: ${customBrowsers.length}`); module.exports = function setupKarma(config) { const path = require('path'); config.set({ failOnEmptyTestSuite: false, singleRun: true, basePath: path.resolve('.'), browserStack: { project: packageObject.name, build: `${packageObject.version}-${(new Date()).toISOString()}`, }, // Without this empty it will not work customLaunchers: customLaunchers, tapReporter: { outputFile: path.resolve('.') + '/unit.tap', disableStdout: true }, concurrency: 1, browserDisconnectTimeout: 10000, browserNoActivityTimeout: 600000, retryLimit: 0, captureTimeout: 4 * 60 * 1000, browsers: [].concat(customBrowsers), detectBrowsers: { enabled: enableDetectBrowsers, }, plugins: [ 'karma-mocha', 'karma-chai', 'karma-sinon', 'karma-webpack', 'karma-sourcemap-loader', 'karma-spec-reporter', 'karma-tap-reporter', 'karma-browserstack-launcher', 'karma-chrome-launcher', 'karma-firefox-launcher', 'karma-ie-launcher', 'karma-edge-launcher', 'karma-safari-launcher', 'karma-opera-launcher', 'karma-phantomjs-launcher', 'karma-detect-browsers', 'karma-intl-shim', ], reporters: ['tap', 'spec', 'BrowserStack'], specReporter: { prefixes: { success: 'OK: ', failure: 'FAILED: ', skipped: 'SKIPPED: ' } }, frameworks: ['detectBrowsers', 'mocha', 'chai', 'sinon', 'intl-shim'], files: [ path.resolve('.') + '/node_modules/babel-polyfill/dist/polyfill.js', path.resolve('.') + '/test/**/*-test.js', // specify files to watch for tests path.resolve('.') + '/node_modules/intl/locale-data/jsonp/en-US.js', path.resolve('.') + '/node_modules/intl/locale-data/jsonp/sv-SE.js', path.resolve('.') + '/node_modules/intl/locale-data/jsonp/da-DK.js', ], preprocessors: { 'src/*.js': ['webpack', 'sourcemap'], 'test/*.js': ['webpack', 'sourcemap'], 'src/**/*.js': ['webpack', 'sourcemap'], 'test/**/*.js': ['webpack', 'sourcemap'], 'test-data/*.js': ['webpack', 'sourcemap'], }, webpackMiddleware: { noInfo: true, }, webpack: { devtool: 'inline-source-map', resolve: { // allow us to avoid including extension name extensions: ['.js', '.jsx'], // required for enzyme to work properly alias: { 'sinon': 'sinon/pkg/sinon' } }, module: { rules: [ { test: [/\.js$/, /\.jsx$/], include: [ path.join(packageDir, 'bundles'), path.join(packageDir, 'src'), path.join(packageDir, 'test')], loader: 'babel-loader', options: { presets: ['es2015', 'react'], plugins: [ ['transform-css-require'], ['transform-object-rest-spread'], ['transform-class-properties'], ['transform-object-assign']], }, }, ], }, externals: { 'jsdom': 'window', 'cheerio': 'window', 'react/lib/ExecutionEnvironment': true, 'react/lib/ReactContext': 'window', 'react/addons': true, }, }, }); };