@@ -2,7 +2,7 @@ import { createServer, Server } from 'http';
2
2
import { AddressInfo } from 'net' ;
3
3
import { parse } from 'graphql' ;
4
4
import { makeExecutableSchema } from '@graphql-tools/schema' ;
5
- import { isAsyncIterable } from '@graphql-tools/utils' ;
5
+ import { createGraphQLError , isAsyncIterable } from '@graphql-tools/utils' ;
6
6
import { normalizedExecutor } from '../normalizedExecutor' ;
7
7
8
8
describe ( 'Error Handling' , ( ) => {
@@ -35,15 +35,18 @@ describe('Error Handling', () => {
35
35
expect ( result . errors ?. [ 0 ] ?. message ) . toBe ( 'This is not an error instance' ) ;
36
36
} ) ;
37
37
if ( globalThis . fetch != null ) {
38
- let server : Server ;
38
+ let server : Server | undefined ;
39
39
afterEach ( async ( ) => {
40
- if ( ! server ) {
40
+ if ( ! server ?. listening ) {
41
41
return ;
42
42
}
43
43
if ( ! globalThis . Bun ) {
44
44
server . closeAllConnections ( ) ;
45
45
}
46
46
await new Promise < void > ( ( resolve , reject ) => {
47
+ if ( ! server ) {
48
+ return resolve ( ) ;
49
+ }
47
50
server . close ( err => ( err ? reject ( err ) : resolve ( ) ) ) ;
48
51
} ) ;
49
52
} ) ;
@@ -52,6 +55,9 @@ describe('Error Handling', () => {
52
55
res . end ( '{ "myData": "foo"' ) ;
53
56
} ) ;
54
57
await new Promise < void > ( resolve => {
58
+ if ( ! server ) {
59
+ throw new Error ( 'Server is not initialized' ) ;
60
+ }
55
61
server . listen ( 0 , resolve ) ;
56
62
} ) ;
57
63
const serverPort = ( server . address ( ) as AddressInfo ) . port ;
@@ -94,4 +100,42 @@ describe('Error Handling', () => {
94
100
}
95
101
} ) ;
96
102
}
103
+ it ( 'handles aggregated errors' , async ( ) => {
104
+ const schema = makeExecutableSchema ( {
105
+ typeDefs : /* GraphQL */ `
106
+ type Query {
107
+ throwMe: String
108
+ }
109
+ ` ,
110
+ resolvers : {
111
+ Query : {
112
+ throwMe : ( ) =>
113
+ new AggregateError (
114
+ [ new Error ( 'This is an error' ) , new Error ( 'This is another error' ) ] ,
115
+ 'This is an aggregated error' ,
116
+ ) ,
117
+ } ,
118
+ } ,
119
+ } ) ;
120
+ const result = await normalizedExecutor ( {
121
+ schema,
122
+ document : parse ( /* GraphQL */ `
123
+ query {
124
+ throwMe
125
+ }
126
+ ` ) ,
127
+ } ) ;
128
+ if ( isAsyncIterable ( result ) ) {
129
+ throw new Error ( 'Expected a result, but got an async iterable' ) ;
130
+ }
131
+ expect ( result ) . toEqual ( {
132
+ data : {
133
+ throwMe : null ,
134
+ } ,
135
+ errors : [
136
+ createGraphQLError ( 'This is an error' , { } ) ,
137
+ createGraphQLError ( 'This is another error' , { } ) ,
138
+ ] ,
139
+ } ) ;
140
+ } ) ;
97
141
} ) ;
0 commit comments