@@ -12,11 +12,14 @@ import {Observable, of, Subject} from 'rxjs';
12
12
import { catchError , retry , scan , skip , take , toArray } from 'rxjs/operators' ;
13
13
14
14
import {
15
+ HttpClient ,
15
16
HttpDownloadProgressEvent ,
16
17
HttpErrorResponse ,
17
18
HttpHeaderResponse ,
18
19
HttpParams ,
19
20
HttpStatusCode ,
21
+ provideHttpClient ,
22
+ withFetch ,
20
23
} from '../public_api' ;
21
24
import { FetchBackend , FetchFactory } from '../src/fetch' ;
22
25
@@ -416,6 +419,36 @@ describe('FetchBackend', async () => {
416
419
fetchMock . mockFlush ( 0 , 'CORS 0 status' ) ;
417
420
} ) ;
418
421
} ) ;
422
+
423
+ describe ( 'dynamic global fetch' , ( ) => {
424
+ beforeEach ( ( ) => {
425
+ TestBed . resetTestingModule ( ) ;
426
+ TestBed . configureTestingModule ( {
427
+ providers : [ provideHttpClient ( withFetch ( ) ) ] ,
428
+ } ) ;
429
+ } ) ;
430
+
431
+ it ( 'should use the current implementation of the global fetch' , async ( ) => {
432
+ const fakeFetch = jasmine
433
+ . createSpy ( '' , ( ) => Promise . resolve ( new Response ( JSON . stringify ( { foo : 'bar' } ) ) ) )
434
+ . and . callThrough ( ) ;
435
+ globalThis . fetch = fakeFetch ;
436
+
437
+ const client = TestBed . inject ( HttpClient ) ;
438
+ expect ( fakeFetch ) . not . toHaveBeenCalled ( ) ;
439
+ let response = await client . get < unknown > ( '' ) . toPromise ( ) ;
440
+ expect ( fakeFetch ) . toHaveBeenCalled ( ) ;
441
+ expect ( response ) . toEqual ( { foo : 'bar' } ) ;
442
+
443
+ // We dynamicaly change the implementation of fetch
444
+ const fakeFetch2 = jasmine
445
+ . createSpy ( '' , ( ) => Promise . resolve ( new Response ( JSON . stringify ( { foo : 'baz' } ) ) ) )
446
+ . and . callThrough ( ) ;
447
+ globalThis . fetch = fakeFetch2 ;
448
+ response = await client . get < unknown > ( '' ) . toPromise ( ) ;
449
+ expect ( response ) . toEqual ( { foo : 'baz' } ) ;
450
+ } ) ;
451
+ } ) ;
419
452
} ) ;
420
453
421
454
export class MockFetchFactory extends FetchFactory {
0 commit comments