test: decrease duration of test-cli-syntax
Previously, test/parallel/test-cli-syntax.js was spawning a lot of child processes, but using spawnSync, which made the test run each child process serially. This switches most of the test cases to use exec so that they are asynchronous. Locally, the test went from > 5 seconds to under 2 seconds. PR-URL: https://github.com/nodejs/node/pull/14187 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
parent
ac41db4af0
commit
a74ddff1d9
@ -2,7 +2,7 @@
|
||||
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const spawnSync = require('child_process').spawnSync;
|
||||
const {exec, spawnSync} = require('child_process');
|
||||
const path = require('path');
|
||||
|
||||
const node = process.execPath;
|
||||
@ -29,12 +29,13 @@ const notFoundRE = /^Error: Cannot find module/m;
|
||||
// loop each possible option, `-c` or `--check`
|
||||
syntaxArgs.forEach(function(args) {
|
||||
const _args = args.concat(file);
|
||||
const c = spawnSync(node, _args, {encoding: 'utf8'});
|
||||
|
||||
// no output should be produced
|
||||
assert.strictEqual(c.stdout, '', 'stdout produced');
|
||||
assert.strictEqual(c.stderr, '', 'stderr produced');
|
||||
assert.strictEqual(c.status, 0, `code === ${c.status}`);
|
||||
const cmd = [node, ..._args].join(' ');
|
||||
exec(cmd, common.mustCall((err, stdout, stderr) => {
|
||||
assert.ifError(err);
|
||||
assert.strictEqual(stdout, '', 'stdout produced');
|
||||
assert.strictEqual(stderr, '', 'stderr produced');
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
@ -50,18 +51,20 @@ const notFoundRE = /^Error: Cannot find module/m;
|
||||
// loop each possible option, `-c` or `--check`
|
||||
syntaxArgs.forEach(function(args) {
|
||||
const _args = args.concat(file);
|
||||
const c = spawnSync(node, _args, {encoding: 'utf8'});
|
||||
const cmd = [node, ..._args].join(' ');
|
||||
exec(cmd, common.mustCall((err, stdout, stderr) => {
|
||||
assert.strictEqual(err instanceof Error, true);
|
||||
assert.strictEqual(err.code, 1, `code === ${err.code}`);
|
||||
|
||||
// no stdout should be produced
|
||||
assert.strictEqual(c.stdout, '', 'stdout produced');
|
||||
// no stdout should be produced
|
||||
assert.strictEqual(stdout, '', 'stdout produced');
|
||||
|
||||
// stderr should include the filename
|
||||
assert(c.stderr.startsWith(file), "stderr doesn't start with the filename");
|
||||
// stderr should have a syntax error message
|
||||
assert(syntaxErrorRE.test(stderr), 'stderr incorrect');
|
||||
|
||||
// stderr should have a syntax error message
|
||||
assert(syntaxErrorRE.test(c.stderr), 'stderr incorrect');
|
||||
|
||||
assert.strictEqual(c.status, 1, `code === ${c.status}`);
|
||||
// stderr should include the filename
|
||||
assert(stderr.startsWith(file), "stderr doesn't start with the filename");
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
@ -75,15 +78,16 @@ const notFoundRE = /^Error: Cannot find module/m;
|
||||
// loop each possible option, `-c` or `--check`
|
||||
syntaxArgs.forEach(function(args) {
|
||||
const _args = args.concat(file);
|
||||
const c = spawnSync(node, _args, {encoding: 'utf8'});
|
||||
const cmd = [node, ..._args].join(' ');
|
||||
exec(cmd, common.mustCall((err, stdout, stderr) => {
|
||||
// no stdout should be produced
|
||||
assert.strictEqual(stdout, '', 'stdout produced');
|
||||
|
||||
// no stdout should be produced
|
||||
assert.strictEqual(c.stdout, '', 'stdout produced');
|
||||
// stderr should have a module not found error message
|
||||
assert(notFoundRE.test(stderr), 'stderr incorrect');
|
||||
|
||||
// stderr should have a module not found error message
|
||||
assert(notFoundRE.test(c.stderr), 'stderr incorrect');
|
||||
|
||||
assert.strictEqual(c.status, 1, `code === ${c.status}`);
|
||||
assert.strictEqual(err.code, 1, `code === ${err.code}`);
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
@ -122,14 +126,15 @@ syntaxArgs.forEach(function(args) {
|
||||
['-c', '--check'].forEach(function(checkFlag) {
|
||||
['-e', '--eval'].forEach(function(evalFlag) {
|
||||
const args = [checkFlag, evalFlag, 'foo'];
|
||||
const c = spawnSync(node, args, {encoding: 'utf8'});
|
||||
|
||||
assert(
|
||||
c.stderr.startsWith(
|
||||
`${node}: either --check or --eval can be used, not both`
|
||||
)
|
||||
);
|
||||
|
||||
assert.strictEqual(c.status, 9, `code === ${c.status}`);
|
||||
const cmd = [node, ...args].join(' ');
|
||||
exec(cmd, common.mustCall((err, stdout, stderr) => {
|
||||
assert.strictEqual(err instanceof Error, true);
|
||||
assert.strictEqual(err.code, 9, `code === ${err.code}`);
|
||||
assert(
|
||||
stderr.startsWith(
|
||||
`${node}: either --check or --eval can be used, not both`
|
||||
)
|
||||
);
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user