Files
everything-is-suitable/everything-is-suitable-test/e2e/core/test-logger.ts
T
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

110 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export class TestLogger {
private logs: LogEntry[] = [];
private currentTest: string | null = null;
private currentStep: string | null = null;
startTest(testName: string): void {
this.currentTest = testName;
this.currentStep = null;
this.log('info', `开始测试: ${testName}`);
}
endTest(testName: string, status: 'passed' | 'failed', error?: Error): void {
this.log('info', `结束测试: ${testName} - ${status}`);
if (error) {
this.log('error', `测试失败: ${error.message}`, error);
}
this.currentTest = null;
this.currentStep = null;
}
startStep(stepName: string): void {
this.currentStep = stepName;
this.log('info', ` 开始步骤: ${stepName}`);
}
endStep(stepName: string, status: 'passed' | 'failed', error?: Error): void {
this.log('info', ` 结束步骤: ${stepName} - ${status}`);
if (error) {
this.log('error', ` 步骤失败: ${error.message}`, error);
}
this.currentStep = null;
}
debug(message: string): void {
this.log('debug', message);
}
info(message: string): void {
this.log('info', message);
}
warn(message: string): void {
this.log('warn', message);
}
error(message: string, error?: Error): void {
this.log('error', message, error);
}
success(message: string): void {
this.log('info', `${message}`);
}
private log(level: LogLevel, message: string, error?: Error): void {
const entry: LogEntry = {
timestamp: new Date().toISOString(),
level,
message,
test: this.currentTest,
step: this.currentStep,
error
};
this.logs.push(entry);
this.printLog(entry);
}
private printLog(entry: LogEntry): void {
const timestamp = entry.timestamp.split('T')[1].split('.')[0];
const prefix = entry.step ? ` ${entry.step}` : entry.test || 'SYSTEM';
const levelIcon = {
debug: '🔍',
info: '️',
warn: '⚠️',
error: '❌'
}[entry.level];
console.log(`${timestamp} ${levelIcon} [${prefix}] ${entry.message}`);
if (entry.error) {
const errorMessage = entry.error.stack || entry.error.message || String(entry.error);
console.error(errorMessage);
}
}
getLogs(): LogEntry[] {
return this.logs;
}
clearLogs(): void {
this.logs = [];
}
exportLogs(): string {
return JSON.stringify(this.logs, null, 2);
}
}
export interface LogEntry {
timestamp: string;
level: LogLevel;
message: string;
test?: string | null;
step?: string | null;
error?: Error;
}
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
export const testLogger = new TestLogger();