@@ -12,11 +12,14 @@ import {Observable, of, Subject} from 'rxjs';
1212import { catchError , retry , scan , skip , take , toArray } from 'rxjs/operators' ;
1313
1414import {
15+ HttpClient ,
1516 HttpDownloadProgressEvent ,
1617 HttpErrorResponse ,
1718 HttpHeaderResponse ,
1819 HttpParams ,
1920 HttpStatusCode ,
21+ provideHttpClient ,
22+ withFetch ,
2023} from '../public_api' ;
2124import { FetchBackend , FetchFactory } from '../src/fetch' ;
2225
@@ -416,6 +419,43 @@ describe('FetchBackend', async () => {
416419 fetchMock . mockFlush ( 0 , 'CORS 0 status' ) ;
417420 } ) ;
418421 } ) ;
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 originalFetch = globalThis . fetch ;
433+
434+ try {
435+ const fakeFetch = jasmine
436+ . createSpy ( '' , ( ) => Promise . resolve ( new Response ( JSON . stringify ( { foo : 'bar' } ) ) ) )
437+ . and . callThrough ( ) ;
438+ globalThis . fetch = fakeFetch ;
439+
440+ const client = TestBed . inject ( HttpClient ) ;
441+ expect ( fakeFetch ) . not . toHaveBeenCalled ( ) ;
442+ let response = await client . get < unknown > ( '' ) . toPromise ( ) ;
443+ expect ( fakeFetch ) . toHaveBeenCalled ( ) ;
444+ expect ( response ) . toEqual ( { foo : 'bar' } ) ;
445+
446+ // We dynamicaly change the implementation of fetch
447+ const fakeFetch2 = jasmine
448+ . createSpy ( '' , ( ) => Promise . resolve ( new Response ( JSON . stringify ( { foo : 'baz' } ) ) ) )
449+ . and . callThrough ( ) ;
450+ globalThis . fetch = fakeFetch2 ;
451+ response = await client . get < unknown > ( '' ) . toPromise ( ) ;
452+ expect ( response ) . toEqual ( { foo : 'baz' } ) ;
453+ } finally {
454+ // We need to restore the original fetch implementation, else the tests might become flaky
455+ globalThis . fetch = originalFetch ;
456+ }
457+ } ) ;
458+ } ) ;
419459} ) ;
420460
421461export class MockFetchFactory extends FetchFactory {
0 commit comments