test: refactor how spec files are collected (#23774)
This commit is contained in:
parent
5d88d0ee74
commit
3a7775fa73
3 changed files with 87 additions and 82 deletions
|
@ -37,7 +37,7 @@ protocol.registerSchemesAsPrivileged([
|
||||||
{ scheme: 'bar', privileges: { standard: true } }
|
{ scheme: 'bar', privileges: { standard: true } }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
app.whenReady().then(() => {
|
app.whenReady().then(async () => {
|
||||||
require('ts-node/register');
|
require('ts-node/register');
|
||||||
|
|
||||||
const argv = require('yargs')
|
const argv = require('yargs')
|
||||||
|
@ -68,53 +68,45 @@ app.whenReady().then(() => {
|
||||||
if (argv.grep) mocha.grep(argv.grep);
|
if (argv.grep) mocha.grep(argv.grep);
|
||||||
if (argv.invert) mocha.invert();
|
if (argv.invert) mocha.invert();
|
||||||
|
|
||||||
// Read all test files.
|
const filter = (file) => {
|
||||||
const walker = require('walkdir').walk(__dirname, {
|
if (!/-spec\.[tj]s$/.test(file)) {
|
||||||
no_recurse: true
|
return false;
|
||||||
});
|
|
||||||
|
|
||||||
// This allows you to run specific modules only:
|
|
||||||
// npm run test -match=menu
|
|
||||||
const moduleMatch = process.env.npm_config_match
|
|
||||||
? new RegExp(process.env.npm_config_match, 'g')
|
|
||||||
: null;
|
|
||||||
|
|
||||||
const testFiles = [];
|
|
||||||
walker.on('file', (file) => {
|
|
||||||
if (/-spec\.[tj]s$/.test(file) &&
|
|
||||||
(!moduleMatch || moduleMatch.test(file))) {
|
|
||||||
testFiles.push(file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This allows you to run specific modules only:
|
||||||
|
// npm run test -match=menu
|
||||||
|
const moduleMatch = process.env.npm_config_match
|
||||||
|
? new RegExp(process.env.npm_config_match, 'g')
|
||||||
|
: null;
|
||||||
|
if (moduleMatch && !moduleMatch.test(file)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const baseElectronDir = path.resolve(__dirname, '..');
|
||||||
|
if (argv.files && !argv.files.includes(path.relative(baseElectronDir, file))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getFiles = require('../spec/static/get-files');
|
||||||
|
const testFiles = await getFiles(__dirname, { filter });
|
||||||
|
testFiles.sort().forEach((file) => {
|
||||||
|
mocha.addFile(file);
|
||||||
});
|
});
|
||||||
|
|
||||||
const baseElectronDir = path.resolve(__dirname, '..');
|
const cb = () => {
|
||||||
|
// Ensure the callback is called after runner is defined
|
||||||
walker.on('end', () => {
|
process.nextTick(() => {
|
||||||
testFiles.sort();
|
process.exit(runner.failures);
|
||||||
testFiles.forEach((file) => {
|
|
||||||
if (!argv.files || argv.files.includes(path.relative(baseElectronDir, file))) {
|
|
||||||
mocha.addFile(file);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
const cb = () => {
|
};
|
||||||
// Ensure the callback is called after runner is defined
|
|
||||||
process.nextTick(() => {
|
|
||||||
process.exit(runner.failures);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Set up chai in the correct order
|
// Set up chai in the correct order
|
||||||
const chai = require('chai');
|
const chai = require('chai');
|
||||||
chai.use(require('chai-as-promised'));
|
chai.use(require('chai-as-promised'));
|
||||||
chai.use(require('dirty-chai'));
|
chai.use(require('dirty-chai'));
|
||||||
|
|
||||||
const runner = mocha.run(cb);
|
const runner = mocha.run(cb);
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function partition (xs, f) {
|
|
||||||
const trues = [];
|
|
||||||
const falses = [];
|
|
||||||
xs.forEach(x => (f(x) ? trues : falses).push(x));
|
|
||||||
return [trues, falses];
|
|
||||||
}
|
|
||||||
|
|
15
spec/static/get-files.js
Normal file
15
spec/static/get-files.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
async function getFiles (directoryPath, { filter = null } = {}) {
|
||||||
|
const files = [];
|
||||||
|
const walker = require('walkdir').walk(directoryPath, {
|
||||||
|
no_recurse: true
|
||||||
|
});
|
||||||
|
walker.on('file', (file) => {
|
||||||
|
if (!filter || filter(file)) {
|
||||||
|
files.push(file);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
await new Promise((resolve) => walker.on('end', resolve));
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = getFiles;
|
|
@ -1,7 +1,7 @@
|
||||||
<body>
|
<body>
|
||||||
<script src="jquery-2.0.3.min.js"></script>
|
<script src="jquery-2.0.3.min.js"></script>
|
||||||
<script type="text/javascript" charset="utf-8">
|
<script type="text/javascript" charset="utf-8">
|
||||||
(function() {
|
(async function() {
|
||||||
// Deprecated APIs are still supported and should be tested.
|
// Deprecated APIs are still supported and should be tested.
|
||||||
process.throwDeprecation = false
|
process.throwDeprecation = false
|
||||||
|
|
||||||
|
@ -49,47 +49,45 @@
|
||||||
if (query.grep) mocha.grep(query.grep)
|
if (query.grep) mocha.grep(query.grep)
|
||||||
if (query.invert) mocha.invert()
|
if (query.invert) mocha.invert()
|
||||||
|
|
||||||
const files = query.files ? query.files.split(',') : undefined
|
const filter = (file) => {
|
||||||
|
if (!/-spec\.js$/.test(file)) {
|
||||||
// Read all test files.
|
return false
|
||||||
const walker = require('walkdir').walk(path.dirname(__dirname), {
|
|
||||||
no_recurse: true
|
|
||||||
})
|
|
||||||
|
|
||||||
// This allows you to run specific modules only:
|
|
||||||
// npm run test -match=menu
|
|
||||||
const moduleMatch = process.env.npm_config_match
|
|
||||||
? new RegExp(process.env.npm_config_match, 'g')
|
|
||||||
: null
|
|
||||||
|
|
||||||
const testFiles = []
|
|
||||||
walker.on('file', (file) => {
|
|
||||||
if (/-spec\.js$/.test(file) && (!moduleMatch || moduleMatch.test(file))) {
|
|
||||||
testFiles.push(file)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This allows you to run specific modules only:
|
||||||
|
// npm run test -match=menu
|
||||||
|
const moduleMatch = process.env.npm_config_match
|
||||||
|
? new RegExp(process.env.npm_config_match, 'g')
|
||||||
|
: null
|
||||||
|
if (moduleMatch && !moduleMatch.test(file)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const files = query.files ? query.files.split(',') : undefined
|
||||||
|
const baseElectronDir = path.resolve(__dirname, '..', '..')
|
||||||
|
if (files && !files.includes(path.relative(baseElectronDir, file))) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
const getFiles = require('./get-files')
|
||||||
|
const testFiles = await getFiles(path.dirname(__dirname), { filter })
|
||||||
|
testFiles.sort().forEach((file) => {
|
||||||
|
mocha.addFile(file)
|
||||||
})
|
})
|
||||||
|
|
||||||
const baseElectronDir = path.resolve(__dirname, '..', '..')
|
// Set up chai in the correct order
|
||||||
|
const chai = require('chai')
|
||||||
|
chai.use(require('chai-as-promised'))
|
||||||
|
chai.use(require('dirty-chai'))
|
||||||
|
|
||||||
walker.on('end', () => {
|
const runner = mocha.run(() => {
|
||||||
testFiles.sort()
|
// Ensure the callback is called after runner is defined
|
||||||
testFiles.forEach((file) => {
|
setTimeout(() => {
|
||||||
if (!files || files.includes(path.relative(baseElectronDir, file))) {
|
ipcRenderer.send('process.exit', runner.failures)
|
||||||
mocha.addFile(file)
|
}, 0)
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// Set up chai in the correct order
|
|
||||||
const chai = require('chai')
|
|
||||||
chai.use(require('chai-as-promised'))
|
|
||||||
chai.use(require('dirty-chai'))
|
|
||||||
|
|
||||||
const runner = mocha.run(() => {
|
|
||||||
// Ensure the callback is called after runner is defined
|
|
||||||
setTimeout(() => {
|
|
||||||
ipcRenderer.send('process.exit', runner.failures)
|
|
||||||
}, 0)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})()
|
})()
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue