blob: f8117aef49d652ce327b39541bade4ee666afb16 [file] [log] [blame]
/* Copyright 2019 The Chromium Authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file.
*/
const path = require('path');
process.env.CHROME_BIN = require('puppeteer').executablePath();
module.exports = function(config) {
const isDebug = process.argv.some((arg) => arg === '--debug');
const coverage = process.argv.some((arg) => arg === '--coverage');
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
client: {
mocha: {
reporter: 'html',
ui: 'bdd',
checkLeaks: true,
globals: [
'CS_env',
// __tsMonClient probably shouldn't be allowed to
// leak between tests, but locating the current source of these
// leaks has proven quite difficult.
'__tsMonClient',
'ga',
'Color',
'Chart',
// TODO(ehmaldonado): Remove once the old autocomplete code is
// deprecated.
'TKR_populateAutocomplete',
// All of the below are necessary for loading gapi.js.
'gapi',
'__gapiLoadPromise',
'___jsl',
'osapi',
'gadgets',
'shindig',
'googleapis',
'iframer',
'ToolbarApi',
'iframes',
'IframeBase',
'Iframe',
'IframeProxy',
'IframeWindow',
'__gapi_jstiming__',
],
timeout: 5000,
},
},
mochaReporter: {
showDiff: true,
},
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['parallel', 'mocha', 'sinon'],
// list of files / patterns to load in the browser
files: [
'static_src/test/setup.js',
'static_src/test/index.js',
],
// list of files / patterns to exclude
exclude: [
],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'static_src/test/setup.js': ['webpack', 'sourcemap'],
'static_src/test/index.js': ['webpack', 'sourcemap'],
},
plugins: [
'karma-chrome-launcher',
'karma-coverage',
'karma-mocha',
'karma-mocha-reporter',
'karma-parallel',
'karma-sinon',
'karma-sourcemap-loader',
'karma-webpack',
'@chopsui/karma-reporter',
],
parallelOptions: {
// Our builder is on a VM with 8 CPUs, so force this
// to run the same number of shards locally too.
// Vary this number to stress test order dependencies.
executors: isDebug ? 1 : 7, // Defaults to cpu-count - 1
shardStrategy: 'round-robin',
},
webpack: {
// webpack configuration
devtool: 'inline-source-map',
mode: 'development',
resolve: {
modules: ['node_modules', 'static_src'],
},
module: {
rules: [
{
test: /\.(ts|tsx)$/,
exclude: /node_modules/,
use: ['babel-loader'],
},
{
test: /\.css$/i,
use: [
{loader: 'style-loader', options: {injectType: 'styleTag'}},
{
loader: 'css-loader',
options: {
modules: true,
importLoaders: 1,
},
},
'postcss-loader',
],
},
],
},
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['mocha', 'chopsui-json'].concat(
coverage ? ['coverage'] : []),
// configure coverage reporter
coverageReporter: {
dir: 'coverage',
reporters: [
{type: 'lcovonly', subdir: '.'},
{type: 'json', subdir: '.', file: 'coverage.json'},
{type: 'html'},
{type: 'text'},
],
},
chopsUiReporter: {
stdout: false,
buildNumber: String(new Date().getTime()),
outputFile: 'full_results.json',
},
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: isDebug ? ['Chrome_latest'] : ['ChromeHeadless'],
customLaunchers: {
Chrome_latest: {
base: 'Chrome',
version: 'latest',
},
},
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: isDebug ? false : true,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity,
});
};