feat: 前端统一 Logger 模块 — 接口、双流 Sink、ESLint 规则、测试
This commit is contained in:
74
tests/web/hooks/use-logger.test.ts
Normal file
74
tests/web/hooks/use-logger.test.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
/* eslint-disable @typescript-eslint/no-empty-function */
|
||||
|
||||
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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user