Skip to content
Source
Sign inSign up

useDeadline.browser.test.tsx

25 lines951 Bytes

1import { describe, expect, it, vi } from "vite-plus/test";
2​
3import { act, fakeTimers, render } from "../../test/render";
4import { useNowAfter } from "./useDeadline";
5​
6function Probe(props: { deadlineMs: number }) {
7 const nowMs = useNowAfter(props.deadlineMs);
8 return <output>{nowMs >= props.deadlineMs ? "passed" : "pending"}</output>;
9}
10​
11describe("useNowAfter", () => {
12 it("reads a fresh clock when a later deadline passes", async () => {
13 // The first render reads the clock.
14 using _timers = fakeTimers({ now: 0 });
15 await using screen = await render(<Probe deadlineMs={1_000} />, {
16 // A bare hook probe; nothing here navigates.
17 router: false,
18 });
19 await screen.rerender(<Probe deadlineMs={2_000} />);
20 await expect.element(screen.getByText("pending")).toBeInTheDocument();
21​
22 await act(() => vi.advanceTimersByTime(2_000));
23 await expect.element(screen.getByText("passed")).toBeInTheDocument();
24 });
25});