37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import { TestInfo } from '@playwright/test';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
const RESULTS_DIR = path.join(process.cwd(), 'test-results', 'write-outputs');
|
|
|
|
/**
|
|
* Attaches captured data to the test report and writes it to disk.
|
|
* Used by all "write" type tests to persist their recorded output.
|
|
*/
|
|
export async function attachWriteResult(
|
|
testInfo: TestInfo,
|
|
data: Record<string, unknown>,
|
|
label = 'recorded-output',
|
|
): Promise<void> {
|
|
if (!fs.existsSync(RESULTS_DIR)) {
|
|
fs.mkdirSync(RESULTS_DIR, { recursive: true });
|
|
}
|
|
|
|
const sanitizedTitle = testInfo.title.replace(/[^a-z0-9-_]/gi, '_').slice(0, 100);
|
|
const filePath = path.join(RESULTS_DIR, `${sanitizedTitle}.json`);
|
|
|
|
const output = {
|
|
testId: testInfo.title,
|
|
capturedAt: new Date().toISOString(),
|
|
status: 'recorded',
|
|
data,
|
|
};
|
|
|
|
fs.writeFileSync(filePath, JSON.stringify(output, null, 2), 'utf-8');
|
|
|
|
await testInfo.attach(label, {
|
|
body: JSON.stringify(output, null, 2),
|
|
contentType: 'application/json',
|
|
});
|
|
}
|