11import { TestBed , inject } from '@angular/core/testing' ;
22
3- import { LazyMapsAPILoader } from '../../../src/core/services/maps-api-loader/lazy-maps-api-loader' ;
3+ import { GoogleMapsScriptProtocol , LazyMapsAPILoader , LazyMapsAPILoaderConfig } from '../../../src/core/services/maps-api-loader/lazy-maps-api-loader' ;
44import { MapsAPILoader } from '../../../src/core/services/maps-api-loader/maps-api-loader' ;
55import { DOCUMENT_GLOBAL , WINDOW_GLOBAL } from '../../../src/core/utils/browser-globals' ;
66
77export function main ( ) {
88 describe ( 'Service: LazyMapsAPILoader' , ( ) => {
9- beforeEach ( ( ) => {
9+ it ( 'should create the default script URL' , ( ) => {
1010 TestBed . configureTestingModule ( {
1111 providers : [
1212 { provide : MapsAPILoader , useClass : LazyMapsAPILoader } ,
@@ -16,30 +16,63 @@ export function main() {
1616 }
1717 ]
1818 } ) ;
19+
20+ inject ( [ MapsAPILoader , DOCUMENT_GLOBAL ] , ( loader : LazyMapsAPILoader , doc : Document ) => {
21+ interface Script {
22+ src ?: string ;
23+ async ?: boolean ;
24+ defer ?: boolean ;
25+ type ?: string ;
26+ }
27+ const scriptElem : Script = { } ;
28+ ( < jasmine . Spy > doc . createElement ) . and . returnValue ( scriptElem ) ;
29+ doc . body = jasmine . createSpyObj ( 'body' , [ 'appendChild' ] ) ;
30+
31+ loader . load ( ) ;
32+ expect ( doc . createElement ) . toHaveBeenCalled ( ) ;
33+ expect ( scriptElem . type ) . toEqual ( 'text/javascript' ) ;
34+ expect ( scriptElem . async ) . toEqual ( true ) ;
35+ expect ( scriptElem . defer ) . toEqual ( true ) ;
36+ expect ( scriptElem . src ) . toBeDefined ( ) ;
37+ expect ( scriptElem . src ) . toContain ( 'https://maps.googleapis.com/maps/api/js' ) ;
38+ expect ( scriptElem . src ) . toContain ( 'v=3' ) ;
39+ expect ( scriptElem . src ) . toContain ( 'callback=angular2GoogleMapsLazyMapsAPILoader' ) ;
40+ expect ( doc . body . appendChild ) . toHaveBeenCalledWith ( scriptElem ) ;
41+ } ) ;
1942 } ) ;
2043
21- it ( 'should create the default script URL' ,
22- inject ( [ MapsAPILoader , DOCUMENT_GLOBAL ] , ( loader : LazyMapsAPILoader , doc : Document ) => {
23- interface Script {
24- src ?: string ;
25- async ?: boolean ;
26- defer ?: boolean ;
27- type ?: string ;
28- }
29- const scriptElem : Script = { } ;
30- ( < jasmine . Spy > doc . createElement ) . and . returnValue ( scriptElem ) ;
31- doc . body = jasmine . createSpyObj ( 'body' , [ 'appendChild' ] ) ;
32-
33- loader . load ( ) ;
34- expect ( doc . createElement ) . toHaveBeenCalled ( ) ;
35- expect ( scriptElem . type ) . toEqual ( 'text/javascript' ) ;
36- expect ( scriptElem . async ) . toEqual ( true ) ;
37- expect ( scriptElem . defer ) . toEqual ( true ) ;
38- expect ( scriptElem . src ) . toBeDefined ( ) ;
39- expect ( scriptElem . src ) . toContain ( 'https://maps.googleapis.com/maps/api/js' ) ;
40- expect ( scriptElem . src ) . toContain ( 'v=3' ) ;
41- expect ( scriptElem . src ) . toContain ( 'callback=angular2GoogleMapsLazyMapsAPILoader' ) ;
42- expect ( doc . body . appendChild ) . toHaveBeenCalledWith ( scriptElem ) ;
43- } ) ) ;
44+ it ( 'should load the script via http when provided' , ( ) => {
45+ const lazyLoadingConf : LazyMapsAPILoaderConfig = new LazyMapsAPILoaderConfig ( ) ;
46+ lazyLoadingConf . protocol = GoogleMapsScriptProtocol . HTTP ;
47+
48+ TestBed . configureTestingModule ( {
49+ providers : [
50+ { provide : MapsAPILoader , useClass : LazyMapsAPILoader } ,
51+ { provide : WINDOW_GLOBAL , useValue : { } } , {
52+ provide : DOCUMENT_GLOBAL ,
53+ useValue : jasmine . createSpyObj < Document > ( 'Document' , [ 'createElement' ] )
54+ }
55+ ]
56+ } ) ;
57+
58+ inject ( [ MapsAPILoader , DOCUMENT_GLOBAL ] , ( loader : LazyMapsAPILoader , doc : Document ) => {
59+ interface Script {
60+ src ?: string ;
61+ async ?: boolean ;
62+ defer ?: boolean ;
63+ type ?: string ;
64+ }
65+ const scriptElem : Script = { } ;
66+ ( < jasmine . Spy > doc . createElement ) . and . returnValue ( scriptElem ) ;
67+ doc . body = jasmine . createSpyObj ( 'body' , [ 'appendChild' ] ) ;
68+
69+ loader . load ( ) ;
70+ expect ( doc . createElement ) . toHaveBeenCalled ( ) ;
71+ expect ( scriptElem . src ) . toContain ( 'http://maps.googleapis.com/maps/api/js' ) ;
72+ expect ( scriptElem . src ) . toContain ( 'v=3' ) ;
73+ expect ( scriptElem . src ) . toContain ( 'callback=angular2GoogleMapsLazyMapsAPILoader' ) ;
74+ expect ( doc . body . appendChild ) . toHaveBeenCalledWith ( scriptElem ) ;
75+ } ) ;
76+ } ) ;
4477 } ) ;
4578}
0 commit comments