diff --git a/package.json b/package.json index 2fc807d0..b8dddc29 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openstack-uicore-foundation", - "version": "5.0.43", + "version": "5.0.45-beta.0", "description": "ui reactjs components for openstack marketing site", "main": "lib/openstack-uicore-foundation.js", "scripts": { diff --git a/src/utils/__tests__/lazy-with-reload.test.js b/src/utils/__tests__/lazy-with-reload.test.js new file mode 100644 index 00000000..2f5e6b11 --- /dev/null +++ b/src/utils/__tests__/lazy-with-reload.test.js @@ -0,0 +1,458 @@ +jest.mock("react", () => ({ + ...jest.requireActual("react"), + lazy: jest.fn((loader) => loader), +})); + +const mockCaptureMessage = jest.fn(); +jest.mock("@sentry/react", () => ({ + captureMessage: (...args) => mockCaptureMessage(...args), +})); + +// reloadOnChunkError's "once per page" guard is module-level state, so each +// test needs its own fresh module instance (see beforeEach below) - a static +// import would leak that guard across tests in file-declaration order. +let isChunkLoadError; +let reloadOnChunkError; +let lazyWithReload; +let initChunkErrorRecovery; +let chunkErrorSentryBeforeSend; + +const chunkLoadError = () => Object.assign(new Error("Loading chunk 3 failed.\n(missing: https://app.test/foo_abc123.js)"), { + name: "ChunkLoadError", +}); + +const htmlParsedAsScriptError = (filename) => Object.assign( + new Error("Unexpected token '<'"), + { name: "SyntaxError", filename } +); + +// Replaces document's