CRM/frontend/e2e/fixtures.ts

43 خطوط
1.2 KiB
TypeScript

import {
expect,
test as base,
type Request,
type Response,
} from '@playwright/test'
type AutomaticFixtures = {
enforceApiHealth: void
}
export const test = base.extend<AutomaticFixtures>({
enforceApiHealth: [async ({ page }, use) => {
const failures: string[] = []
const recordFailedRequest = (request: Request) => {
if (isApiUrl(request.url())) {
failures.push(`${request.method()} ${request.url()} failed: ${request.failure()?.errorText ?? 'unknown error'}`)
}
}
const recordServerError = (response: Response) => {
if (isApiUrl(response.url()) && response.status() >= 500) {
failures.push(`${response.request().method()} ${response.url()} returned ${response.status()}`)
}
}
page.on('requestfailed', recordFailedRequest)
page.on('response', recordServerError)
await use()
page.off('requestfailed', recordFailedRequest)
page.off('response', recordServerError)
expect(failures, `Unexpected API failures:\n${failures.join('\n')}`).toEqual([])
}, { auto: true }],
})
export { expect }
function isApiUrl(value: string) {
const pathname = new URL(value).pathname
return pathname.startsWith('/api/') || pathname.startsWith('/sanctum/')
}