import { expect, test as base } from '@playwright/test' export const expectedErrors = new WeakMap>() export function allowExpectedError(page: object, fragment: string) { expectedErrors.get(page)?.add(fragment) } export const test = base.extend({ page: async ({ page }, use) => { const failures: string[] = [] const allowed = new Set() expectedErrors.set(page, allowed) const record = (message: string) => { if (![...allowed].some(pattern => message.includes(pattern))) failures.push(message) } page.on('pageerror', error => record(`pageerror: ${error.message}`)) page.on('console', message => { if (message.type() === 'error') record(`console.error: ${message.text()}`) }) page.on('requestfailed', request => record(`requestfailed: ${request.method()} ${request.url()} ${request.failure()?.errorText ?? ''}`)) page.on('response', response => { const url = new URL(response.url()) const baseURL = new URL(page.url() || 'http://127.0.0.1:5173') if (url.origin === baseURL.origin && response.status() >= 400) record(`http ${response.status()}: ${response.request().method()} ${url.pathname}`) }) await use(page) expect(failures, 'unexpected browser/runtime errors').toEqual([]) }, }) export { expect }