nodebook
Version:
Node.js • Apprendre par la pratique. Familiarisez-vous avec JavaScript, Node.js et l'écosystème de modules npm. Apprenez à concevoir et à déployer des *applications web* et des *outils en ligne de commande*.
68 lines (53 loc) • 1.86 kB
JavaScript
;
const test = require('blue-tape');
const tapSpec = require('tap-spec');
const {extname, posix, relative, join} = require('path');
const spawn = require('tape-spawn');
const glob = require('glob');
const {platform} = process;
test.createStream().pipe(tapSpec()).pipe(process.stdout);
const EXTRAS = require('./examples-config.js');
const examples = glob.sync(process.argv[3] || '*/examples/**/*.{mjs,js}');
const serverSide = (file) => /chapter-09/.test(file) === false;
const nodeModules = (file) => /node_modules/.test(file) === false;
const DEFAULT_CONFIG = {
exitCode: 0,
timeout: 5000,
};
examples
.filter(serverSide)
.filter(nodeModules)
.forEach(FILE => {
test(FILE, {timeout: 1000}, t => {
const {[FILE]:config=DEFAULT_CONFIG} = EXTRAS;
let nodeArgs = '';
if (config.skip) {
t.skip();
return t.end();
}
// enable ECMAScript Module experimental support
if (extname(FILE) === '.mjs') {
nodeArgs += '--experimental-modules'
}
const {command='node', args:cmdArgs=''} = config;
const cwd = join(__dirname, '..', FILE.split(posix.sep)[0]);
const test_file = relative(cwd, FILE);
const p = spawn(t, `${command} ${nodeArgs} ${test_file} ${cmdArgs}`, {cwd});
p.exitCode(config.exitCode, `exit code = ${config.exitCode}`);
if (config.timeout) {
t.timeoutAfter(config.timeout * 2)
p.timeout(config.timeout);
}
if (config.stdin) {
p.stdin.end(config.stdin);
}
if (config.stdout) {
// runs win32 specific tests or default platforms
p.stdout.match(config[`${platform}stdout`] || config.stdout);
}
config.stderr
? p.stderr.match(new RegExp(config.stderr))
: p.stderr.match(/^$/, 'stderr is empty');
return p.end();
});
});