nextui/packages/hooks/use-image/__tests__/use-image.test.tsx
աӄա f9c2be4509
fix(use-image): load images after props change (#4523)
* fix(use-image): load image after props change

* chore(changeset): add changeset

* refactor(use-image): remove unused props

* feat(use-image): add test case

* fix(use-image): apply useCallback to load & remove status check

* chore(changeset): update package name
2025-01-30 09:44:38 -03:00

58 lines
1.6 KiB
TypeScript

import {renderHook, waitFor} from "@testing-library/react";
import {mocks} from "@heroui/test-utils";
import {useImage} from "../src";
describe("use-image hook", () => {
let mockImage: {restore: any; simulate: (value: "loaded" | "error") => void};
beforeEach(() => {
mockImage = mocks.image();
});
afterEach(() => {
mockImage.restore();
});
it("can handle missing src", () => {
const {result} = renderHook(() => useImage({}));
expect(result.current).toEqual("pending");
});
it("can handle loading image", async () => {
const {result} = renderHook(() => useImage({src: "/test.png"}));
expect(result.current).toEqual("loading");
mockImage.simulate("loaded");
await waitFor(() => expect(result.current).toBe("loaded"));
});
it("can handle changing image", async () => {
const {result, rerender} = renderHook(() => useImage({src: undefined}));
expect(result.current).toEqual("pending");
setTimeout(() => {
rerender({src: "/test.png"});
}, 3000);
mockImage.simulate("loaded");
await waitFor(() => expect(result.current).toBe("loaded"));
});
it("can handle error image", async () => {
mockImage.simulate("error");
const {result} = renderHook(() => useImage({src: "/test.png"}));
expect(result.current).toEqual("loading");
await waitFor(() => expect(result.current).toBe("failed"));
});
it("can handle cached image", async () => {
mockImage.simulate("loaded");
const {result} = renderHook(() => useImage({src: "/test.png"}));
await waitFor(() => expect(result.current).toBe("loaded"));
});
});