import { describe, expect, mock, test } from "bun:test"; import { createElement } from "react"; import type { Logger } from "../../../src/web/utils/logger"; import { useLogger } from "../../../src/web/hooks/use-logger"; import { renderWithProviders } from "../test-utils"; function HookTester({ onMount }: { onMount: (logger: Logger) => void }) { const logger = useLogger(); onMount(logger); return null; } describe("useLogger", () => { test("返回 Logger 实例含所有方法", () => { let logger: Logger | undefined; const onMount = (l: Logger) => { logger = l; }; renderWithProviders(createElement(HookTester, { onMount })); expect(logger).toBeDefined(); expect(typeof logger!.debug).toBe("function"); expect(typeof logger!.info).toBe("function"); expect(typeof logger!.warn).toBe("function"); expect(typeof logger!.error).toBe("function"); expect(typeof logger!.child).toBe("function"); expect(typeof logger!.setLevel).toBe("function"); }); test("调用 logger.warn 时静默不抛异常", () => { const warnSpy = mock(() => {}); const origWarn = console.warn; console.warn = warnSpy; let logger: Logger | undefined; renderWithProviders( createElement(HookTester, { onMount: (l: Logger) => { logger = l; }, }), ); expect(() => logger!.warn("测试警告")).not.toThrow(); console.warn = origWarn; expect(warnSpy).toHaveBeenCalled(); }); test("调用 logger.error 时静默不抛异常", () => { const errorSpy = mock(() => {}); const origError = console.error; console.error = errorSpy; let logger: Logger | undefined; renderWithProviders( createElement(HookTester, { onMount: (l: Logger) => { logger = l; }, }), ); expect(() => logger!.error("测试错误")).not.toThrow(); console.error = origError; expect(errorSpy).toHaveBeenCalled(); }); });