mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
* 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
58 lines
1.6 KiB
TypeScript
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"));
|
|
});
|
|
});
|