UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

69 lines (68 loc) 2.77 kB
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; describe("routeHmr.native", () => { let routeHmr; const realWindow = globalThis.window; const realModuleUpdatedHook = globalThis.__VXRN_ON_MODULE_UPDATED__; beforeEach(async () => { vi.stubEnv("NODE_ENV", "development"); vi.resetModules(); routeHmr = await import("./routeHmr.native"); }); afterEach(() => { vi.unstubAllEnvs(); globalThis.__VXRN_ON_MODULE_UPDATED__ = realModuleUpdatedHook; globalThis.window = realWindow; }); it("registers globalThis.__VXRN_ON_MODULE_UPDATED__ in development", () => { expect(typeof globalThis.__VXRN_ON_MODULE_UPDATED__).toBe("function"); }); it("does not bump the epoch, so Fast Refresh can keep the mounted route", () => { const before = routeHmr.getRouteHmrEpoch(); const listener = vi.fn(); const unsubscribe = routeHmr.subscribeRouteHmr(listener); globalThis.__VXRN_ON_MODULE_UPDATED__("app/index.tsx"); expect(routeHmr.getRouteHmrEpoch()).toBe(before); expect(listener).not.toHaveBeenCalled(); unsubscribe(); }); it("evicts the route cache for the updated file when window.__oneRouteCache is present", () => { const clearFile = vi.fn(() => true); globalThis.window = { __oneRouteCache: { clearFile } }; globalThis.__VXRN_ON_MODULE_UPDATED__("app/_layout.tsx"); expect(clearFile).toHaveBeenCalledWith("app/_layout.tsx"); }); it("does not bump the epoch for a non-route module either", () => { const before = routeHmr.getRouteHmrEpoch(); const listener = vi.fn(); const unsubscribe = routeHmr.subscribeRouteHmr(listener); globalThis.window = { __oneRouteCache: { clearFile: () => false } }; globalThis.__VXRN_ON_MODULE_UPDATED__("features/onboarding/HmrProbeChild.tsx"); expect(routeHmr.getRouteHmrEpoch()).toBe(before); expect(listener).not.toHaveBeenCalled(); unsubscribe(); }); it("does not throw when window / route cache is absent", () => { ; globalThis.window = void 0; expect(() => globalThis.__VXRN_ON_MODULE_UPDATED__("x.tsx")).not.toThrow(); }); it("does not throw or bump the epoch when route-cache eviction throws", () => { const listener = vi.fn(); const unsubscribe = routeHmr.subscribeRouteHmr(listener); const before = routeHmr.getRouteHmrEpoch(); globalThis.window = { __oneRouteCache: { clearFile() { throw new Error("cache eviction failed"); } } }; expect(() => globalThis.__VXRN_ON_MODULE_UPDATED__("app/index.tsx")).not.toThrow(); expect(routeHmr.getRouteHmrEpoch()).toBe(before); expect(listener).not.toHaveBeenCalled(); unsubscribe(); }); }); //# sourceMappingURL=routeHmr.native.test.js.map