mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-09 01:16:15 -08:00
* add scoped coverage reporting * fix coverage review feedback --------- Co-authored-by: 4gray <fourgray@proton.me>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { test as base, expect, type Page } from '@playwright/test';
|
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
|
|
function safeArtifactName(value: string): string {
|
|
return value
|
|
.replace(/[^a-z0-9]+/gi, '-')
|
|
.replace(/^-+|-+$/g, '')
|
|
.slice(0, 120);
|
|
}
|
|
|
|
export const test = base.extend<{ page: Page }>({
|
|
page: async ({ page }, use, testInfo) => {
|
|
if (process.env['IPTVNATOR_E2E_V8_COVERAGE'] !== '1') {
|
|
await use(page);
|
|
return;
|
|
}
|
|
|
|
await page.coverage.startJSCoverage({ resetOnNavigation: false });
|
|
await page.coverage.startCSSCoverage({ resetOnNavigation: false });
|
|
|
|
try {
|
|
await use(page);
|
|
} finally {
|
|
const [js, css] = await Promise.all([
|
|
page.coverage.stopJSCoverage(),
|
|
page.coverage.stopCSSCoverage(),
|
|
]);
|
|
const coverageDir = path.join(testInfo.outputDir, 'v8-coverage');
|
|
const artifactName = safeArtifactName(testInfo.titlePath.join(' '));
|
|
|
|
await mkdir(coverageDir, { recursive: true });
|
|
await writeFile(
|
|
path.join(coverageDir, `${artifactName || 'test'}.json`),
|
|
`${JSON.stringify({ css, js }, null, 4)}\n`
|
|
);
|
|
}
|
|
},
|
|
});
|
|
|
|
export { expect };
|