Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 50 additions & 1 deletion src/hooks/__tests__/useCardPreview.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -318,4 +318,53 @@ describe("useCardPreview", () => {
expect(toBlob).not.toHaveBeenCalled();
expect(result.current.copyStatus).toBe("idle");
});
});

it("handles fonts ready failure in generate effect", async () => {
// Suppress unhandled rejection warning by catching it
const fontsReadyPromise = Promise.reject(new Error("Fonts loading failed"));
fontsReadyPromise.catch(() => {});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

When suppressing unhandled promise rejections, log the error instead of silently ignoring it to facilitate debugging. Please update the catch block to log the error using the logger.

    fontsReadyPromise.catch((err) => {
      logger.error("Suppressed unhandled rejection:", err);
    });
References
  1. When suppressing unhandled promise rejections, log the error instead of silently ignoring it to facilitate debugging.


Object.defineProperty(document, "fonts", {
value: {
ready: fontsReadyPromise,
},
configurable: true,
});

const { result, rerender } = renderHook(
({ isOpen }) =>
useCardPreview(isOpen, mockCardRef, mockSummary, mockLayout, mockDisplayOptions),
{ initialProps: { isOpen: false } }
);

rerender({ isOpen: true });

await waitFor(() => {
expect(result.current.isGenerating).toBe(false);
});

expect(result.current.previewUrl).toBeNull();
expect(result.current.previewSize).toBeNull();
});

it("handles generateImage failure due to target error", async () => {
// Override the mock block to return null or throw earlier if possible, but testing the catch block of generateImage
const error = new Error("Mock Error");
vi.mocked(toPng).mockRejectedValueOnce(error);

const { result, rerender } = renderHook(
({ isOpen }) =>
useCardPreview(isOpen, mockCardRef, mockSummary, mockLayout, mockDisplayOptions),
{ initialProps: { isOpen: false } }
);

rerender({ isOpen: true });

await waitFor(() => {
expect(result.current.isGenerating).toBe(false);
});

expect(logger.error).toHaveBeenCalledWith("Failed to generate image", error);
expect(result.current.previewUrl).toBeNull();
});
});
Loading