UNPKG

one

Version:

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

72 lines (71 loc) 1.86 kB
import { describe, expect, it, vi } from "vitest"; import React from "react"; import TestRenderer, { act } from "react-test-renderer"; import { Redirect } from "./Redirect.mjs"; import { jsx } from "react/jsx-runtime"; vi.mock("../useFocusEffect", () => ({ useFocusEffect: (effect, deps) => React.useEffect(effect, deps) })); const replaceCalls = []; let resolvePending; vi.mock("../hooks", () => ({ useRouter: () => ({ replace: href => { replaceCalls.push(href); return new Promise(resolve => { resolvePending = resolve; }); } }) })); async function flush() { await act(async () => { await Promise.resolve(); await Promise.resolve(); }); } describe("Redirect", () => { it("fires replace once across the mount/unmount churn of an auth-state settle", async () => { replaceCalls.length = 0; for (let i = 0; i < 8; i++) { let r; act(() => { r = TestRenderer.create(/* @__PURE__ */jsx(Redirect, { href: "/home" })); }); act(() => { r.unmount(); }); } expect(replaceCalls).toEqual(["/home"]); resolvePending?.(); await flush(); act(() => { TestRenderer.create(/* @__PURE__ */jsx(Redirect, { href: "/home" })); }); expect(replaceCalls).toEqual(["/home", "/home"]); resolvePending?.(); await flush(); }); it("does not re-fire within a single mounted instance", async () => { replaceCalls.length = 0; let r; act(() => { r = TestRenderer.create(/* @__PURE__ */jsx(Redirect, { href: "/login" })); }); act(() => { r.update(/* @__PURE__ */jsx(Redirect, { href: "/login" })); }); expect(replaceCalls).toEqual(["/login"]); resolvePending?.(); await flush(); }); }); //# sourceMappingURL=Redirect.test.mjs.map