import { vi, type Mock } from "vitest"; const noop = () => {}; type ConsoleMethod = "log" | "info" | "warn" | "error" | "debug"; type Spies = Record< Keys[number], Mock<(message?: any, ...args: any[]) => void> >; export function spyOnConsole( ...spyOn: Keys ): Spies & Disposable { const spies = {} as Spies; for (const key of spyOn) { // @ts-ignore spies[key] = vi.spyOn(console, key).mockImplementation(noop); } return { ...spies, [Symbol.dispose]() { for (const spy of Object.values(spies) as Mock[]) { spy.mockRestore(); } }, }; }