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.totalTests}
总测试数
✅
${report.totalPassed}
通过
❌
${report.totalFailed}
失败
⏭️
${report.totalSkipped}
跳过
📈
${report.passRate}%
通过率
⏱️
${this.formatDuration(report.totalDuration)}
总耗时
环境信息
- Node.js: ${report.environment.node}
- 平台: ${report.environment.platform}
- CI环境: ${report.environment.ci ? '是' : '否'}
测试套件详情
${report.testSuites.map(suite => this.generateSuiteHTML(suite)).join('')}
`.trim();
}
private generateSuiteHTML(suite: any): string {
return `
${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}
`;
}
}