chiro-canto/public/scripts/wavesurfer/karma.conf.js

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);
};