fix: suppress Playwright CDP cleanup assertion errors in tests

- Add vitest.setup.ts to handle unhandled rejections from CDP disconnect
- Fix race condition in debugger test by awaiting evaluate after resume
- Add delay before browser.close() in service worker test
This commit is contained in:
Tommy D. Rossi
2026-02-01 17:08:07 +01:00
parent a2fa91584d
commit 806d2b108b
3 changed files with 34 additions and 1 deletions
+8 -1
View File
@@ -650,7 +650,10 @@ describe('CDP Session Tests', () => {
cdpSession.on('Debugger.paused', () => resolve())
})
cdpPage!.evaluate('runTest()')
// Don't await - we want it to pause at breakpoint
const evalPromise = cdpPage!.evaluate('runTest()').catch(() => {
// Ignore errors from evaluate when browser closes
})
await pausedPromise
expect(dbg.isPaused()).toBe(true)
@@ -667,6 +670,8 @@ describe('CDP Session Tests', () => {
`)
await dbg.resume()
// Wait for evaluate to complete after resume
await evalPromise
cdpSession.close()
await browser.close()
@@ -987,6 +992,8 @@ describe('Service Worker Target Tests', () => {
const title = await targetPage!.title()
expect(title).toBeTruthy()
// Small delay to let pending CDP operations flush before closing
await new Promise(r => setTimeout(r, 100))
await browser.close()
await page.close()
}, 60000)
+1
View File
@@ -7,6 +7,7 @@ export default defineConfig({
testTimeout: 60000, // 60 seconds for Chrome startup
hookTimeout: 30000,
exclude: ['dist', 'dist/**/*', 'node_modules/**'],
setupFiles: ['./vitest.setup.ts'],
env: {
PLAYWRITER_NODE_ENV: 'development',
+25
View File
@@ -0,0 +1,25 @@
/**
* Vitest setup file - handles unhandled rejections from Playwright CDP cleanup.
*
* When tests use connectOverCDP() to connect to Chrome, Playwright may have
* pending CDP messages when browser.close() is called. These messages get
* rejected when the connection closes, causing "Assertion error" from
* Playwright's internal crConnection.js. This is expected cleanup behavior,
* not a real error.
*/
process.on('unhandledRejection', (reason: any) => {
// Suppress Playwright's internal assertion errors during CDP cleanup
// These happen when browser.close() is called with pending CDP messages
if (reason?.message === 'Assertion error' || reason?.name === 'AssertionError') {
// Check if it's from Playwright's internal code
const stack = reason?.stack || ''
if (stack.includes('crConnection.js') || stack.includes('crSession')) {
// Silently ignore - this is expected cleanup behavior
return
}
}
// Re-throw other unhandled rejections
console.error('Unhandled rejection:', reason)
})