@@ -145,6 +145,25 @@ describe('ScriptManager hooks', () => {
145145 ) ;
146146 } ) ;
147147
148+ it ( 'should allow obtaining locator from error hook as fallback' , async ( ) => {
149+ const errorHookCallback = jest . fn ( ) ;
150+ ScriptManager . shared . hooks . errorResolve ( async ( { error, options } ) => {
151+ errorHookCallback ( options . scriptId , options . caller , error ) ;
152+ return { url : `http://domain.ext/${ options . scriptId } .js` } ;
153+ } ) ;
154+
155+ // No resolver added to trigger error
156+ await expect (
157+ ScriptManager . shared . resolveScript ( 'test-script' , 'test-caller' )
158+ ) . resolves . not . toThrow ( ) ;
159+
160+ expect ( errorHookCallback ) . toHaveBeenCalledWith (
161+ 'test-script' ,
162+ 'test-caller' ,
163+ expect . any ( Error )
164+ ) ;
165+ } ) ;
166+
148167 it ( 'should allow beforeResolve hook to override resolution args' , async ( ) => {
149168 ScriptManager . shared . hooks . beforeResolve ( async ( { options } ) => {
150169 return {
@@ -272,6 +291,7 @@ describe('ScriptManager hooks', () => {
272291 ScriptManager . shared . hooks . load ( async ( { loadScript } ) => {
273292 executionOrder . push ( 'load' ) ;
274293 await loadScript ( ) ;
294+ return true ;
275295 } ) ;
276296
277297 ScriptManager . shared . hooks . afterLoad ( async ( args ) => {
@@ -298,6 +318,7 @@ describe('ScriptManager hooks', () => {
298318
299319 ScriptManager . shared . hooks . errorLoad ( async ( { error, options } ) => {
300320 errorHookCallback ( options . scriptId , options . caller , error ) ;
321+ return false ;
301322 } ) ;
302323
303324 await expect (
@@ -311,6 +332,27 @@ describe('ScriptManager hooks', () => {
311332 ) ;
312333 } ) ;
313334
335+ it ( 'should allow flagging script as loaded from error hook' , async ( ) => {
336+ // prevent no resolvers error
337+ ScriptManager . shared . addResolver ( async ( ) => {
338+ return { url : 'https://domain.ext/test-script' } ;
339+ } ) ;
340+
341+ // emulate loading error through custom load logic
342+ ScriptManager . shared . hooks . load ( async ( ) => {
343+ throw new Error ( 'Load failed' ) ;
344+ } ) ;
345+
346+ // mark the script as loaded despite the error
347+ ScriptManager . shared . hooks . errorLoad ( async ( ) => {
348+ return true ;
349+ } ) ;
350+
351+ await expect (
352+ ScriptManager . shared . loadScript ( 'test-script' )
353+ ) . resolves . not . toThrow ( ) ;
354+ } ) ;
355+
314356 it ( 'should allow load hook to handle loading with custom logic' , async ( ) => {
315357 const spy = jest . spyOn ( NativeScriptManager , 'loadScript' ) ;
316358
@@ -342,6 +384,7 @@ describe('ScriptManager hooks', () => {
342384 retry : 0 ,
343385 retryDelay : 0 ,
344386 } ) ;
387+ return true ;
345388 } ) ;
346389
347390 await expect (
0 commit comments