diff --git a/e2e/playwright/lib/base-fixture.ts b/e2e/playwright/lib/base-fixture.ts new file mode 100644 index 000000000..ca3a11dc6 --- /dev/null +++ b/e2e/playwright/lib/base-fixture.ts @@ -0,0 +1,48 @@ +import * as fs from 'fs' +import * as path from 'path' +import * as crypto from 'crypto' +import { test as baseTest } from '@playwright/test' + +const istanbulCLIOutput = path.join(process.cwd(), '.nyc_output') + +export function generateUUID(): string { + return crypto.randomBytes(16).toString('hex') +} + +export const test = baseTest.extend({ + context: async ({ context }, use) => { + await context.addInitScript(() => + window.addEventListener('beforeunload', () => + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (window as any).collectIstanbulCoverage( + JSON.stringify((window as any).__coverage__) + ) + ) + ) + await fs.promises.mkdir(istanbulCLIOutput, { recursive: true }) + await context.exposeFunction( + 'collectIstanbulCoverage', + (coverageJSON: string) => { + if (coverageJSON) + fs.writeFileSync( + path.join( + istanbulCLIOutput, + `playwright_coverage_${generateUUID()}.json` + ), + coverageJSON + ) + } + ) + await use(context) + for (const page of context.pages()) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + await page.evaluate(() => + (window as any).collectIstanbulCoverage( + JSON.stringify((window as any).__coverage__) + ) + ) + } + }, +}) + +export const expect = test.expect diff --git a/e2e/playwright/testing-settings.spec.ts b/e2e/playwright/testing-settings.spec.ts index ee60d024c..41de056de 100644 --- a/e2e/playwright/testing-settings.spec.ts +++ b/e2e/playwright/testing-settings.spec.ts @@ -1,9 +1,9 @@ -import { test, expect } from '@playwright/test' - +import { expect } from '@playwright/test' import { getUtils, setup, tearDown } from './test-utils' import { SaveSettingsPayload } from 'lib/settings/settingsTypes' import { TEST_SETTINGS_KEY, TEST_SETTINGS_CORRUPTED } from './storageStates' import * as TOML from '@iarna/toml' +import { test } from './lib/base-fixture' test.beforeEach(async ({ context, page }) => { await setup(context, page)