import "@testing-library/jest-dom/vitest"; import { cleanup } from "@testing-library/react"; import { afterEach, vi } from "vitest"; function createCanvasContext() { return { scale: vi.fn(), clearRect: vi.fn(), fillRect: vi.fn(), strokeRect: vi.fn(), beginPath: vi.fn(), closePath: vi.fn(), moveTo: vi.fn(), lineTo: vi.fn(), stroke: vi.fn(), fill: vi.fn(), arc: vi.fn(), rect: vi.fn(), drawImage: vi.fn(), createLinearGradient: vi.fn(() => ({ addColorStop: vi.fn() })), getImageData: vi.fn(() => ({ data: new Uint8ClampedArray(0) })), putImageData: vi.fn(), measureText: vi.fn(() => ({ width: 0 })), save: vi.fn(), restore: vi.fn(), setLineDash: vi.fn(), translate: vi.fn(), rotate: vi.fn(), resetTransform: vi.fn(), setTransform: vi.fn(), lineWidth: 1, lineCap: "round", lineJoin: "round", strokeStyle: "#111827", fillStyle: "#ffffff", canvas: null as HTMLCanvasElement | null, }; } if (typeof HTMLCanvasElement !== "undefined") { Object.defineProperty(HTMLCanvasElement.prototype, "getContext", { configurable: true, value: vi.fn(function getContext(this: HTMLCanvasElement) { const ctx = createCanvasContext(); ctx.canvas = this; return ctx; }), }); Object.defineProperty(HTMLCanvasElement.prototype, "toDataURL", { configurable: true, value: vi.fn(() => "data:image/png;base64,"), }); } afterEach(() => { cleanup(); });