one
Version:
One is a new React Framework that makes Vite serve both native and web.
72 lines (71 loc) • 1.86 kB
JavaScript
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