Skip to content

Commit 9dbb255

Browse files
geeksilva97aduh95
authored andcommitted
assert: fix deepStrictEqual on errors when cause is not undefined
PR-URL: #55406 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
1 parent 7d93c0c commit 9dbb255

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

‎lib/internal/assert/assertion_error.js‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ const {
1515
StringPrototypeSplit,
1616
}=primordials;
1717

18+
const{ isError }=require('internal/util');
19+
1820
const{ inspect }=require('internal/util/inspect');
1921
constcolors=require('internal/util/colors');
2022
const{ validateObject }=require('internal/validators');
@@ -47,6 +49,15 @@ function copyError(source) {
4749
__proto__: null,
4850
value: source.message,
4951
});
52+
if(source.cause!==undefined){
53+
letcause=source.cause;
54+
55+
if(isError(cause)){
56+
cause=copyError(cause);
57+
}
58+
59+
ObjectDefineProperty(target,'cause',{__proto__: null,value: cause});
60+
}
5061
returntarget;
5162
}
5263

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
require('../common');
3+
constassert=require('assert');
4+
const{ test }=require('node:test');
5+
6+
constdefaultStartMessage='Expected values to be strictly deep-equal:\n'+
7+
'+ actual - expected\n'+
8+
'\n';
9+
10+
test('Handle error causes',()=>{
11+
assert.throws(()=>{
12+
assert.deepStrictEqual(newError('a',{cause: newError('x')}),newError('a',{cause: newError('y')}));
13+
},{message: defaultStartMessage+' [Error: a] {\n'+
14+
'+ [cause]: [Error: x]\n'+
15+
'- [cause]: [Error: y]\n'+
16+
' }\n'});
17+
18+
assert.throws(()=>{
19+
assert.deepStrictEqual(newError('a'),newError('a',{cause: newError('y')}));
20+
},{message: defaultStartMessage+'+ [Error: a]\n'+
21+
'- [Error: a] {\n'+
22+
'- [cause]: [Error: y]\n'+
23+
'- }\n'});
24+
25+
assert.throws(()=>{
26+
assert.deepStrictEqual(newError('a'),newError('a',{cause: {prop: 'value'}}));
27+
},{message: defaultStartMessage+'+ [Error: a]\n'+
28+
'- [Error: a] {\n'+
29+
'- [cause]: {\n'+
30+
'- prop: \'value\'\n'+
31+
'- }\n'+
32+
'- }\n'});
33+
34+
assert.notDeepStrictEqual(newError('a',{cause: newError('x')}),newError('a',{cause: newError('y')}));
35+
assert.notDeepStrictEqual(
36+
newError('a',{cause: {prop: 'value'}}),
37+
newError('a',{cause: {prop: 'a different value'}})
38+
);
39+
});

0 commit comments

Comments
 (0)