152 lines
4.7 KiB
JavaScript
152 lines
4.7 KiB
JavaScript
/* eslint-env node */
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
process.env.BABEL_ENV = 'test';
|
|
process.traceDeprecation = true;
|
|
|
|
require('@babel/register');
|
|
const webpackConfig = require('./build-config/webpack.prod.main.js');
|
|
const ci = process.env.CI || process.env.APPVEYOR;
|
|
|
|
// Chrome CLI options
|
|
// http://peter.sh/experiments/chromium-command-line-switches/
|
|
const chromeFlags = [
|
|
'--no-sandbox',
|
|
'--no-first-run',
|
|
'--noerrdialogs',
|
|
'--no-default-browser-check',
|
|
'--user-data-dir=' + path.resolve('.chrome'),
|
|
'--disable-translate',
|
|
'--disable-extensions',
|
|
'--disable-infobars',
|
|
'--ignore-certificate-errors',
|
|
'--allow-insecure-localhost',
|
|
'--autoplay-policy=no-user-gesture-required',
|
|
// see https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio
|
|
'--disable-features=PreloadMediaEngagementData,AutoplayIgnoreWebAudio,MediaEngagementBypassAutoplayPolicies'
|
|
];
|
|
const firefoxFlags = {
|
|
// disable autoplay blocking, see https://www.ghacks.net/2018/09/21/firefox-improved-autoplay-blocking/
|
|
'media.autoplay.default': 0,
|
|
'media.autoplay.ask-permission': false,
|
|
'media.autoplay.enabled.user-gestures-needed': false,
|
|
'media.autoplay.block-webaudio': false
|
|
};
|
|
|
|
module.exports = function(config) {
|
|
let configuration = {
|
|
basePath: '',
|
|
frameworks: ['jasmine', 'jasmine-matchers', 'webpack'],
|
|
hostname: 'localhost',
|
|
port: 9876,
|
|
logLevel: config.LOG_INFO,
|
|
singleRun: true,
|
|
autoWatch: false,
|
|
files: [
|
|
// demo files
|
|
{
|
|
pattern: 'spec/support/**',
|
|
included: false,
|
|
watched: false,
|
|
served: true,
|
|
nocache: true
|
|
},
|
|
|
|
// specs
|
|
'spec/plugin-api.spec.js',
|
|
'spec/util.spec.js',
|
|
'spec/wavesurfer.spec.js',
|
|
'spec/peakcache.spec.js',
|
|
'spec/mediaelement.spec.js',
|
|
'spec/mediaelement-webaudio.spec.js',
|
|
'spec/drawer.spec.js',
|
|
'spec/webaudio.spec.js'
|
|
],
|
|
customHeaders: [
|
|
{
|
|
match: 'demo.wav',
|
|
name: 'Content-Length',
|
|
value: fs.statSync('./spec/support/demo.wav')['size']
|
|
}
|
|
],
|
|
preprocessors: {
|
|
'spec/plugin-api.spec.js': ['webpack'],
|
|
'spec/util.spec.js': ['webpack'],
|
|
'spec/wavesurfer.spec.js': ['webpack'],
|
|
'spec/peakcache.spec.js': ['webpack'],
|
|
'spec/mediaelement.spec.js': ['webpack'],
|
|
'spec/mediaelement-webaudio.spec.js': ['webpack'],
|
|
'spec/drawer.spec.js': ['webpack'],
|
|
'spec/webaudio.spec.js': ['webpack'],
|
|
|
|
// source files, that you want to generate coverage for
|
|
// do not include tests or libraries
|
|
'src/**/*.js': ['coverage']
|
|
},
|
|
webpackMiddleware: {
|
|
stats: 'errors-only'
|
|
},
|
|
plugins: [
|
|
'karma-webpack',
|
|
'karma-jasmine',
|
|
'karma-jasmine-matchers',
|
|
'karma-chrome-launcher',
|
|
'karma-firefox-launcher',
|
|
'@chiragrupani/karma-chromium-edge-launcher',
|
|
'karma-coverage',
|
|
'karma-verbose-reporter'
|
|
],
|
|
browsers: ['Chrome_dev', 'Firefox_dev'],
|
|
captureConsole: true,
|
|
colors: true,
|
|
reporters: ['verbose', 'progress', 'coverage'],
|
|
coverageReporter: {
|
|
dir: 'coverage',
|
|
reporters: [
|
|
{ type: 'html', subdir: 'html' },
|
|
{ type: 'lcov', subdir: 'lcov' }
|
|
]
|
|
},
|
|
webpack: webpackConfig,
|
|
customLaunchers: {
|
|
Chrome_dev: {
|
|
base: 'Chrome',
|
|
flags: chromeFlags
|
|
},
|
|
Chrome_ci: {
|
|
base: 'ChromeHeadless',
|
|
flags: chromeFlags
|
|
},
|
|
Firefox_dev: {
|
|
base: 'Firefox',
|
|
prefs: firefoxFlags
|
|
},
|
|
Firefox_ci: {
|
|
base: 'FirefoxHeadless',
|
|
prefs: firefoxFlags
|
|
},
|
|
Edge_dev: {
|
|
base: 'Edge',
|
|
flags: chromeFlags,
|
|
chromeDataDir: path.resolve(__dirname, '.edge')
|
|
},
|
|
Edge_ci: {
|
|
base: 'EdgeHeadless',
|
|
flags: chromeFlags,
|
|
chromeDataDir: path.resolve(__dirname, '.edge')
|
|
}
|
|
}
|
|
};
|
|
|
|
if (ci) {
|
|
configuration.browsers = ['Firefox_ci', 'Chrome_ci'];
|
|
|
|
if (process.env.APPVEYOR) {
|
|
configuration.browsers.push('Edge_ci');
|
|
}
|
|
}
|
|
config.set(configuration);
|
|
};
|