Ryan Roemer b34988f9a5
Chore: updates (#121)
- Update devdeps
- Tighten up lint rules
- Update CI to modern Node versions
2023-03-14 08:42:44 -07:00

119 lines
3.3 KiB
JavaScript

'use strict';
const path = require('path');
const webpack = require('webpack');
// **Debugging Help**
// We normally dislike commented out code, but as Karma doesn't easily produce
// a bundle, debugging bundle errors is a pain, particularly on ie11.
// To help with this, uncomment this plugin to write out all Karma webpack
// assets like `test/browser/index.js` to disk as `~/Desktops/test-browser-index.js`
// and then inspect the failing lines you need.
//
// Add the plugin into config for `webpack` below with:
// ```
// plugins: [
// new WriteAssetPlugin()
// ]
// ```
//
// const fs = require('fs').promises;
// const os = require('os');
//
// class WriteAssetPlugin {
// apply(compiler) {
// compiler.hooks.emit.tapPromise("WriteAssetPlugin", this.writeAsset.bind(this));
// }
//
// async writeAsset(compiler) {
// const { assets } = compiler;
//
// await Promise.all(Object.entries(assets).map(async ([file, src]) => {
// const outFile = path.join(os.homedir(), "Desktop", file.split(path.sep).join("-"));
// await fs.writeFile(outFile, src.source());
// }));
// }
// }
module.exports = function(config) {
config.set({
basePath: '../..',
frameworks: ['mocha'],
files: [
'test/browser/index.js'
],
preprocessors: {
'test/browser/index.js': ['webpack']
},
webpack: {
mode: 'development',
// Normally, would follow this guide for source maps:
// https://github.com/webpack-contrib/karma-webpack#source-maps
// Unfortunately, karma-webpack doesn't work with source maps w/ babel.
// https://github.com/webpack-contrib/karma-webpack/issues/176
devtool: false,
module: {
rules: [
{
test: /\.js$/,
enforce: 'pre',
include: [
path.resolve(__dirname, '..'),
// Transpile the `fast-deep-equal` tests for all browsers.
// (The node tests work off real code with ES.next stuff).
path.join(
path.dirname(require.resolve('fast-deep-equal-git/package.json')),
'spec'
)
],
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
]
},
plugins: [
new webpack.ProvidePlugin({
assert: 'assert',
process: 'process'
})
]
},
exclude: [],
port: 8080,
logLevel: config.LOG_INFO,
colors: true,
autoWatch: false,
// Run a customized instance of headless chrome for dev + Travis CI.
browsers: ['ChromeHeadlessCustom'],
customLaunchers: {
ChromeHeadlessCustom: {
base: 'ChromeHeadless',
// --no-sandbox for https://github.com/travis-ci/docs-travis-ci-com/pull/1671/files
flags: ['--no-sandbox']
}
},
reporters: ['mocha'/* TODO, 'coverage'*/],
browserNoActivityTimeout: 60000,
plugins: [
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-safari-launcher',
//'karma-coverage',
'karma-mocha',
'karma-mocha-reporter',
'karma-webpack'
],
coverageReporter: {
type: 'text'
},
browserConsoleLogOptions: {
level: 'log',
format: '%b %T: %m',
terminal: true
},
captureTimeout: 100000,
singleRun: true
});
};