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 <jasnell@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
1 parent 562787e commit 18071db

3 files changed

Lines changed: 35 additions & 19 deletions

File tree

‎lib/assert.js‎

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

664-
functioncreateMsg(msg,key,actual,expected){
665-
if(msg)
666-
returnmsg;
667-
return`${key}: expected ${inspect(expected[key])}, `+
668-
`not ${inspect(actual[key])}`;
664+
functioncompareExceptionKey(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
functionexpectedException(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'inexpected){
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'inexpected){
689-
assert.strictEqual(
690-
actual.message,
691-
expected.message,
692-
createMsg(msg,'message',actual,expected));
692+
compareExceptionKey(actual,expected,'message',msg);
693693
}
694-
constkeys=Object.keys(expected);
695-
for(constkeyofkeys){
696-
assert.deepStrictEqual(
697-
actual[key],
698-
expected[key],
699-
createMsg(msg,key,actual,expected));
694+
for(constkeyofObject.keys(expected)){
695+
compareExceptionKey(actual,expected,key,msg);
700696
}
701697
returntrue;
702698
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
'use strict';
2+
3+
require('../common');
4+
constassert=require('assert').strict;
5+
6+
assert.throws(()=>{thrownewError('foo');},{bar: true});
Lines changed: 14 additions & 0 deletions
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)