43 خطوط
1.2 KiB
TypeScript
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/')
|
|
}
|