30 lines
1.3 KiB
TypeScript
30 lines
1.3 KiB
TypeScript
import { expect, test as base } from '@playwright/test'
|
|
|
|
export const expectedErrors = new WeakMap<object, Set<string>>()
|
|
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<string>()
|
|
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 }
|