test: improve expectWarning error message

expectWarning() fails with a TypeError and a message about undefined not
being iterable when the warning is emitted more times than expected.
This change produces a more useful error message.

Refs: https://github.com/nodejs/node/pull/41307/files#r775197738

PR-URL: https://github.com/nodejs/node/pull/41326
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Rich Trott authored and GitHub committed 2021-12-30 05:58:53 +00:00
1 parent 01c4907696
commit 0465373d77
2 files changed
+55 -1

No files matched your search

+5 -1
View File
@@ -549,7 +549,11 @@ function _expectWarning(name, expected, code) {
expected.forEach(([_, code]) => assert(code, expected));
}
return mustCall((warning) => {
const [ message, code ] = expected.shift();
const expectedProperties = expected.shift();
if (!expectedProperties) {
assert.fail(`Unexpected extra warning received: ${warning}`);
}
const [ message, code ] = expectedProperties;
assert.strictEqual(warning.name, name);
if (typeof message === 'string') {
assert.strictEqual(warning.message, message);
@@ -0,0 +1,50 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const { spawn } = require('child_process');
if (process.argv[2] !== 'child') {
// Expected error not emitted.
{
const child = spawn(
process.execPath, [__filename, 'child', 0], { encoding: 'utf8' }
);
child.on('exit', common.mustCall((status) => {
assert.notStrictEqual(status, 0);
}));
}
// Expected error emitted.
{
const child = spawn(
process.execPath, [__filename, 'child', 1], { encoding: 'utf8' }
);
child.on('exit', common.mustCall((status) => {
assert.strictEqual(status, 0);
}));
}
// Expected error emitted too many times.
{
const child = spawn(
process.execPath, [__filename, 'child', 2], { encoding: 'utf8' }
);
child.stderr.setEncoding('utf8');
let stderr = '';
child.stderr.on('data', (data) => {
stderr += data;
});
child.on('exit', common.mustCall((status) => {
assert.notStrictEqual(status, 0);
assert.match(stderr, /Unexpected extra warning received/);
}));
}
} else {
const iterations = +process.argv[3];
common.expectWarning('fhqwhgads', 'fhqwhgads', 'fhqwhgads');
for (let i = 0; i < iterations; i++) {
process.emitWarning('fhqwhgads', 'fhqwhgads', 'fhqwhgads');
}
}