Archived
init
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import { describe, expect, it, vi, beforeEach, afterEach } from "bun:test";
|
||||
import { renderHook, act } from "@testing-library/react";
|
||||
import { useSWR } from "../src/index";
|
||||
|
||||
const fetcher = vi.fn((key: string) => Promise.resolve(`data-${key}`));
|
||||
|
||||
describe("useSWR (React)", () => {
|
||||
beforeEach(() => {
|
||||
vi.useFakeTimers();
|
||||
fetcher.mockClear();
|
||||
});
|
||||
|
||||
|
||||
it("fetches data on mount", async () => {
|
||||
const { result } = renderHook(() => useSWR("test-key", fetcher));
|
||||
|
||||
expect(result.current.isLoading).toBe(true);
|
||||
|
||||
await act(async () => {
|
||||
await vi.runAllTimers();
|
||||
});
|
||||
|
||||
expect(result.current.data).toBe("data-test-key");
|
||||
expect(result.current.isLoading).toBe(false);
|
||||
});
|
||||
|
||||
it("deduplicates requests", async () => {
|
||||
const { result: r1 } = renderHook(() => useSWR("dedupe-key", fetcher));
|
||||
const { result: r2 } = renderHook(() => useSWR("dedupe-key", fetcher));
|
||||
|
||||
await act(async () => {
|
||||
await vi.runAllTimers();
|
||||
});
|
||||
|
||||
expect(fetcher).toHaveBeenCalledTimes(1);
|
||||
expect(r1.current.data).toBe("data-dedupe-key");
|
||||
expect(r2.current.data).toBe("data-dedupe-key");
|
||||
});
|
||||
|
||||
it("mutates data manually", async () => {
|
||||
const { result } = renderHook(() => useSWR("mutate-key", fetcher));
|
||||
|
||||
await act(async () => {
|
||||
await vi.runAllTimers();
|
||||
});
|
||||
|
||||
expect(result.current.data).toBe("data-mutate-key");
|
||||
|
||||
await act(async () => {
|
||||
await result.current.mutate("new-data");
|
||||
await vi.runAllTimers();
|
||||
});
|
||||
|
||||
expect(result.current.data).toBe("new-data");
|
||||
});
|
||||
|
||||
// it("handles errors", async () => {
|
||||
// const error = new Error("failed");
|
||||
// fetcher.mockImplementationOnce(() => Promise.reject(error));
|
||||
|
||||
// const { result } = renderHook(() => useSWR("error-key", fetcher));
|
||||
|
||||
// await act(async () => {
|
||||
// await vi.runAllTimers();
|
||||
// });
|
||||
|
||||
// expect(result.current.error).toBe(error);
|
||||
// expect(result.current.isLoading).toBe(false);
|
||||
// });
|
||||
});
|
||||
Reference in New Issue
Block a user