six-widget-buildsupport
Version:
SIX Widgets buildsupport
208 lines (199 loc) • 5.91 kB
JavaScript
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,
},
},
});
};