Skip to content

Commit 18071db

Browse files
BridgeARMylesBorins
authored andcommitted
assert: fix throws trace
The current stack trace thrown in case `assert.throws(fn, object)` is used did not filter the stack trace. This fixes it. Backport-PR-URL: #23223 PR-URL: #18595 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Anatoli Papirovski <[email protected]>
1 parent 562787e commit 18071db

File tree

3 files changed

+35
-19
lines changed

3 files changed

+35
-19
lines changed

lib/assert.js

+15-19
Original file line numberDiff line numberDiff line change
@@ -661,11 +661,17 @@ assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
661661
}
662662
};
663663

664-
function createMsg(msg, key, actual, expected) {
665-
if (msg)
666-
return msg;
667-
return `${key}: expected ${inspect(expected[key])}, ` +
668-
`not ${inspect(actual[key])}`;
664+
function compareExceptionKey(actual, expected, key, msg) {
665+
if (!innerDeepEqual(actual[key], expected[key], true)) {
666+
innerFail({
667+
actual: actual[key],
668+
expected: expected[key],
669+
message: msg || `${key}: expected ${inspect(expected[key])}, ` +
670+
`not ${inspect(actual[key])}`,
671+
operator: 'throws',
672+
stackStartFn: assert.throws
673+
});
674+
}
669675
}
670676

671677
function expectedException(actual, expected, msg) {
@@ -680,23 +686,13 @@ function expectedException(actual, expected, msg) {
680686
// The name and message could be non enumerable. Therefore test them
681687
// explicitly.
682688
if ('name' in expected) {
683-
assert.strictEqual(
684-
actual.name,
685-
expected.name,
686-
createMsg(msg, 'name', actual, expected));
689+
compareExceptionKey(actual, expected, 'name', msg);
687690
}
688691
if ('message' in expected) {
689-
assert.strictEqual(
690-
actual.message,
691-
expected.message,
692-
createMsg(msg, 'message', actual, expected));
692+
compareExceptionKey(actual, expected, 'message', msg);
693693
}
694-
const keys = Object.keys(expected);
695-
for (const key of keys) {
696-
assert.deepStrictEqual(
697-
actual[key],
698-
expected[key],
699-
createMsg(msg, key, actual, expected));
694+
for (const key of Object.keys(expected)) {
695+
compareExceptionKey(actual, expected, key, msg);
700696
}
701697
return true;
702698
}

test/message/assert_throws_stack.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
'use strict';
2+
3+
require('../common');
4+
const assert = require('assert').strict;
5+
6+
assert.throws(() => { throw new Error('foo'); }, { bar: true });

test/message/assert_throws_stack.out

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
assert.js:*
2+
throw new errors.AssertionError(obj);
3+
^
4+
5+
AssertionError [ERR_ASSERTION]: bar: expected true, not undefined
6+
at Object.<anonymous> (*assert_throws_stack.js:*:*)
7+
at *
8+
at *
9+
at *
10+
at *
11+
at *
12+
at *
13+
at *
14+
at *

0 commit comments

Comments
 (0)