Skip to content

Commit 177e4d5

Browse files
committed
feat: add more error tests
1 parent 8f30c88 commit 177e4d5

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

packages/repack/src/modules/ScriptManager/__tests__/ScriptManagerHooks.test.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)