Commit 6f74a035 authored by Paul Slaughter's avatar Paul Slaughter

Add empty test suite flag to karma wrapper

This is already supported karma feature, but it wasn't respected
because our wrapper threw an error no matter what.

https://github.com/karma-runner/karma/blob/fe9a1dd13b5eb3969f9e08acbce020e2a382fd9e/lib/cli.js#L201
parent 88b02af3
...@@ -9,11 +9,22 @@ const IS_EE = require('./helpers/is_ee_env'); ...@@ -9,11 +9,22 @@ const IS_EE = require('./helpers/is_ee_env');
const ROOT_PATH = path.resolve(__dirname, '..'); const ROOT_PATH = path.resolve(__dirname, '..');
const SPECS_PATH = /^(?:\.[\\\/])?(ee[\\\/])?spec[\\\/]javascripts[\\\/]/; const SPECS_PATH = /^(?:\.[\\\/])?(ee[\\\/])?spec[\\\/]javascripts[\\\/]/;
function fatalError(message) { function exitError(message) {
console.error(chalk.red(`\nError: ${message}\n`)); console.error(chalk.red(`\nError: ${message}\n`));
process.exit(1); process.exit(1);
} }
function exitWarn(message) {
console.error(chalk.yellow(`\nWarn: ${message}\n`));
process.exit(0);
}
function exit(message, isError = true) {
const fn = isError ? exitError : exitWarn;
fn(message);
}
// disable problematic options // disable problematic options
webpackConfig.entry = undefined; webpackConfig.entry = undefined;
webpackConfig.mode = 'development'; webpackConfig.mode = 'development';
...@@ -31,7 +42,8 @@ webpackConfig.plugins.push( ...@@ -31,7 +42,8 @@ webpackConfig.plugins.push(
}), }),
); );
const specFilters = argumentsParser const options = argumentsParser
.option('--no-fail-on-empty-test-suite')
.option( .option(
'-f, --filter-spec [filter]', '-f, --filter-spec [filter]',
'Filter run spec files by path. Multiple filters are like a logical OR.', 'Filter run spec files by path. Multiple filters are like a logical OR.',
...@@ -41,7 +53,9 @@ const specFilters = argumentsParser ...@@ -41,7 +53,9 @@ const specFilters = argumentsParser
}, },
[], [],
) )
.parse(process.argv).filterSpec; .parse(process.argv);
const specFilters = options.filterSpec;
const createContext = (specFiles, regex, suffix) => { const createContext = (specFiles, regex, suffix) => {
const newContext = specFiles.reduce((context, file) => { const newContext = specFiles.reduce((context, file) => {
...@@ -73,11 +87,13 @@ if (specFilters.length) { ...@@ -73,11 +87,13 @@ if (specFilters.length) {
filteredSpecFiles = [...new Set(filteredSpecFiles)]; filteredSpecFiles = [...new Set(filteredSpecFiles)];
if (filteredSpecFiles.length < 1) { if (filteredSpecFiles.length < 1) {
fatalError('Your filter did not match any test files.'); const isError = options.failOnEmptyTestSuite;
exit('Your filter did not match any test files.', isError);
} }
if (!filteredSpecFiles.every(file => SPECS_PATH.test(file))) { if (!filteredSpecFiles.every(file => SPECS_PATH.test(file))) {
fatalError('Test files must be located within /spec/javascripts.'); exitError('Test files must be located within /spec/javascripts.');
} }
const CE_FILES = filteredSpecFiles.filter(file => !file.startsWith('ee')); const CE_FILES = filteredSpecFiles.filter(file => !file.startsWith('ee'));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment