@@ -14,6 +14,54 @@ describe("loadScript", () => {
1414 await expect ( loadScript ( "" ) ) . rejects . toThrow ( 'No "src" provided to loadScript' ) ;
1515 } ) ;
1616
17+ test ( "assigns all direct script properties correctly" , async ( ) => {
18+ const props = {
19+ async : false ,
20+ defer : true ,
21+ fetchPriority : "low" ,
22+ noModule : true ,
23+ id : "test-script" ,
24+ type : "text/javascript" ,
25+ crossOrigin : "anonymous" ,
26+ referrerPolicy : "origin" ,
27+ integrity : "sha384-abc123" ,
28+ nonce : "xyz123" ,
29+ textContent : "Hello, world!" ,
30+ } as LoadScriptOptions ;
31+
32+ const promise = loadScript ( SCRIPT_SRC , props ) ;
33+
34+ const [ script ] = document . querySelectorAll ( `script[src="${ SCRIPT_SRC } "]` ) ;
35+ expect ( script ) . toBeDefined ( ) ;
36+
37+ script ?. dispatchEvent ( new Event ( "load" ) ) ;
38+ const resolved = await promise ;
39+
40+ expect ( resolved . async ) . toBe ( false ) ;
41+ expect ( resolved . id ) . toBe ( "test-script" ) ;
42+ expect ( resolved . defer ) . toBe ( true ) ;
43+ expect ( resolved . fetchPriority ) . toBe ( "low" ) ;
44+ expect ( resolved . noModule ) . toBe ( true ) ;
45+ expect ( resolved . type ) . toBe ( "text/javascript" ) ;
46+ expect ( resolved . crossOrigin ) . toBe ( "anonymous" ) ;
47+ expect ( resolved . referrerPolicy ) . toBe ( "origin" ) ;
48+ expect ( resolved . integrity ) . toBe ( "sha384-abc123" ) ;
49+ expect ( resolved . nonce ) . toBe ( "xyz123" ) ;
50+ expect ( resolved . textContent ) . toBe ( "Hello, world!" ) ;
51+ } ) ;
52+
53+ test ( "applies additional script attributes via setAttribute" , async ( ) => {
54+ const promise = loadScript ( SCRIPT_SRC , { "data-id" : "custom-script-id" } ) ;
55+
56+ const [ script ] = document . querySelectorAll ( `script[src="${ SCRIPT_SRC } "]` ) ;
57+ expect ( script ) . toBeDefined ( ) ;
58+
59+ script ?. dispatchEvent ( new Event ( "load" ) ) ;
60+ const resolved = await promise ;
61+
62+ expect ( resolved . getAttribute ( "data-id" ) ) . toBe ( "custom-script-id" ) ;
63+ } ) ;
64+
1765 test ( "resolves immediately if script already exists in DOM" , async ( ) => {
1866 const script = document . createElement ( "script" ) ;
1967 script . src = SCRIPT_SRC ;
@@ -80,52 +128,16 @@ describe("loadScript", () => {
80128 expect ( resolved2 ) . not . toBe ( resolved1 ) ;
81129 } ) ;
82130
83- test ( "assigns all direct script properties correctly" , async ( ) => {
84- const props = {
85- async : false ,
86- defer : true ,
87- fetchPriority : "low" ,
88- noModule : true ,
89- id : "test-script" ,
90- type : "text/javascript" ,
91- crossOrigin : "anonymous" ,
92- referrerPolicy : "origin" ,
93- integrity : "sha384-abc123" ,
94- nonce : "xyz123" ,
95- textContent : "Hello, world!" ,
96- } as LoadScriptOptions ;
97-
98- const promise = loadScript ( SCRIPT_SRC , props ) ;
99-
100- const [ script ] = document . querySelectorAll ( `script[src="${ SCRIPT_SRC } "]` ) ;
101- expect ( script ) . toBeDefined ( ) ;
102-
103- script ?. dispatchEvent ( new Event ( "load" ) ) ;
104- const resolved = await promise ;
105-
106- expect ( resolved . async ) . toBe ( false ) ;
107- expect ( resolved . id ) . toBe ( "test-script" ) ;
108- expect ( resolved . defer ) . toBe ( true ) ;
109- expect ( resolved . fetchPriority ) . toBe ( "low" ) ;
110- expect ( resolved . noModule ) . toBe ( true ) ;
111- expect ( resolved . type ) . toBe ( "text/javascript" ) ;
112- expect ( resolved . crossOrigin ) . toBe ( "anonymous" ) ;
113- expect ( resolved . referrerPolicy ) . toBe ( "origin" ) ;
114- expect ( resolved . integrity ) . toBe ( "sha384-abc123" ) ;
115- expect ( resolved . nonce ) . toBe ( "xyz123" ) ;
116- expect ( resolved . textContent ) . toBe ( "Hello, world!" ) ;
117- } ) ;
118-
119- test ( "applies additional script attributes via setAttribute" , async ( ) => {
120- const promise = loadScript ( SCRIPT_SRC , { "data-id" : "custom-script-id" } ) ;
131+ test ( "falls back to document.head when container is null" , async ( ) => {
132+ const promise = loadScript ( SCRIPT_SRC , { async : true } , null ) ;
121133
122- const [ script ] = document . querySelectorAll ( ` script[src="${ SCRIPT_SRC } "]`) ;
134+ const script = document . querySelector ( `head script[src="${ SCRIPT_SRC } "]`) ;
123135 expect ( script ) . toBeDefined ( ) ;
124136
125137 script ?. dispatchEvent ( new Event ( "load" ) ) ;
126138 const resolved = await promise ;
127139
128- expect ( resolved . getAttribute ( "data-id" ) ) . toBe ( "custom-script-id" ) ;
140+ expect ( document . head . contains ( resolved ) ) . toBe ( true ) ;
129141 } ) ;
130142
131143 test ( "resolves when script loads" , async ( ) => {
0 commit comments