import { BaseReportGenerator, TestReport, ReportGeneratorOptions, } from './base-report-generator'; export class HTMLReportGenerator extends BaseReportGenerator { constructor(options: ReportGeneratorOptions) { super(options); } getExtension(): string { return 'html'; } generate(report: TestReport): string { const html = this.generateHTML(report); return this.writeToFile(html); } private generateHTML(report: TestReport): string { return ` ${report.reportName} - 测试报告

${report.reportName}

生成时间: ${this.formatTimestamp(report.timestamp)}
📊
${report.totalTests}
总测试数
${report.totalPassed}
通过
${report.totalFailed}
失败
⏭️
${report.totalSkipped}
跳过
📈
${report.passRate}%
通过率
⏱️
${this.formatDuration(report.totalDuration)}
总耗时
${report.passRate}%

环境信息

测试套件详情

${report.testSuites.map(suite => this.generateSuiteHTML(suite)).join('')}
`.trim(); } private generateSuiteHTML(suite: any): string { return `

${suite.suiteName}

✅ ${suite.passed} ❌ ${suite.failed} ⏭️ ${suite.skipped} ⏱️ ${this.formatDuration(suite.duration)}
${suite.tests.map((test: any) => this.generateTestHTML(test)).join('')}
`; } private generateTestHTML(test: any): string { const errorDetails = test.status === 'failed' && test.error ? `
${test.error}${test.stackTrace ? '\n\n' + test.stackTrace : ''}
` : ''; return `
${test.testName}
${this.formatDuration(test.duration)}
${this.getStatusIcon(test.status)}
${errorDetails} `; } }