@@ -10,6 +10,14 @@ describe('class MockLink', () => {
10
10
const queryOne = gql `query One {one}` ;
11
11
const queryTwo = gql `query Two {two}` ;
12
12
13
+ const queryOneOperation = { query : queryOne , variables : { a : 'one' } } as Partial < Operation > as Operation ;
14
+
15
+ const createMockObserver = ( ) : jest . Mocked < Observer < any > > => ( {
16
+ next : jest . fn ( ) ,
17
+ error : jest . fn ( ) ,
18
+ complete : jest . fn ( ) ,
19
+ } ) ;
20
+
13
21
beforeEach ( ( ) => {
14
22
jest . spyOn ( console , 'warn' )
15
23
. mockReset ( ) ;
@@ -81,28 +89,6 @@ describe('class MockLink', () => {
81
89
} ) ;
82
90
83
91
describe ( 'method request' , ( ) => {
84
- const queryOneOperation = { query : queryOne , variables : { a : 'one' } } as Partial < Operation > as Operation ;
85
-
86
- const createMockObserver = ( ) : jest . Mocked < Observer < any > > => ( {
87
- next : jest . fn ( ) ,
88
- error : jest . fn ( ) ,
89
- complete : jest . fn ( ) ,
90
- } ) ;
91
-
92
- it ( 'returns an error when a handler is not defined for the query' , async ( ) => {
93
- const observable = mockLink . request ( queryOneOperation ) ;
94
- const observer = createMockObserver ( ) ;
95
-
96
- observable . subscribe ( observer ) ;
97
-
98
- await new Promise ( r => setTimeout ( r , 0 ) ) ;
99
-
100
- expect ( observer . next ) . not . toBeCalled ( ) ;
101
- expect ( observer . error ) . toBeCalledTimes ( 1 ) ;
102
- expect ( observer . error ) . toBeCalledWith ( new Error ( `Request handler not defined for query: ${ print ( queryOne ) } ` ) ) ;
103
- expect ( observer . complete ) . not . toBeCalled ( ) ;
104
- } ) ;
105
-
106
92
it ( 'correctly executes the handler when the handler is defined as a promise and it and successfully resolves' , async ( ) => {
107
93
const handler = jest . fn ( ) . mockResolvedValue ( { data : 'Query one result' } ) ;
108
94
mockLink . setRequestHandler ( queryOne , handler ) ;
@@ -251,4 +237,44 @@ describe('class MockLink', () => {
251
237
expect ( observer . complete ) . toBeCalledTimes ( 1 ) ;
252
238
} ) ;
253
239
} ) ;
240
+
241
+ describe ( 'constructor option "missingHandlerPolicy"' , ( ) => {
242
+ it ( 'when "error" throws when a handler is not defined for the query' , ( ) => {
243
+ expect ( ( ) => mockLink . request ( queryOneOperation ) )
244
+ . toThrowError ( `Request handler not defined for query: ${ print ( queryOne ) } ` )
245
+ } ) ;
246
+
247
+ it ( 'when "warn" logs a warning when a handler is not defined for the query' , async ( ) => {
248
+ mockLink = new MockLink ( { missingHandlerPolicy : 'warn-and-return-error' } )
249
+
250
+ const observable = mockLink . request ( queryOneOperation ) ;
251
+ const observer = createMockObserver ( ) ;
252
+
253
+ observable . subscribe ( observer ) ;
254
+
255
+ await new Promise ( r => setTimeout ( r , 0 ) ) ;
256
+
257
+ expect ( observer . next ) . not . toBeCalled ( ) ;
258
+ expect ( observer . error ) . toBeCalled ( ) ;
259
+ expect ( observer . complete ) . not . toBeCalled ( ) ;
260
+ expect ( console . warn ) . toBeCalledTimes ( 1 ) ;
261
+ expect ( console . warn ) . toBeCalledWith ( `Request handler not defined for query: ${ print ( queryOne ) } ` ) ;
262
+ } ) ;
263
+
264
+ it ( 'when "ignore" returns an error when a handler is not defined for the query' , async ( ) => {
265
+ mockLink = new MockLink ( { missingHandlerPolicy : 'return-error' } )
266
+
267
+ const observable = mockLink . request ( queryOneOperation ) ;
268
+ const observer = createMockObserver ( ) ;
269
+
270
+ observable . subscribe ( observer ) ;
271
+
272
+ await new Promise ( r => setTimeout ( r , 0 ) ) ;
273
+
274
+ expect ( observer . next ) . not . toBeCalled ( ) ;
275
+ expect ( observer . error ) . toBeCalledTimes ( 1 ) ;
276
+ expect ( observer . error ) . toBeCalledWith ( new Error ( `Request handler not defined for query: ${ print ( queryOne ) } ` ) ) ;
277
+ expect ( observer . complete ) . not . toBeCalled ( ) ;
278
+ } ) ;
279
+ } )
254
280
} ) ;
0 commit comments