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:
@@ -650,7 +650,10 @@ describe('CDP Session Tests', () => {
|
|||||||
cdpSession.on('Debugger.paused', () => resolve())
|
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
|
await pausedPromise
|
||||||
expect(dbg.isPaused()).toBe(true)
|
expect(dbg.isPaused()).toBe(true)
|
||||||
@@ -667,6 +670,8 @@ describe('CDP Session Tests', () => {
|
|||||||
`)
|
`)
|
||||||
|
|
||||||
await dbg.resume()
|
await dbg.resume()
|
||||||
|
// Wait for evaluate to complete after resume
|
||||||
|
await evalPromise
|
||||||
|
|
||||||
cdpSession.close()
|
cdpSession.close()
|
||||||
await browser.close()
|
await browser.close()
|
||||||
@@ -987,6 +992,8 @@ describe('Service Worker Target Tests', () => {
|
|||||||
const title = await targetPage!.title()
|
const title = await targetPage!.title()
|
||||||
expect(title).toBeTruthy()
|
expect(title).toBeTruthy()
|
||||||
|
|
||||||
|
// Small delay to let pending CDP operations flush before closing
|
||||||
|
await new Promise(r => setTimeout(r, 100))
|
||||||
await browser.close()
|
await browser.close()
|
||||||
await page.close()
|
await page.close()
|
||||||
}, 60000)
|
}, 60000)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ export default defineConfig({
|
|||||||
testTimeout: 60000, // 60 seconds for Chrome startup
|
testTimeout: 60000, // 60 seconds for Chrome startup
|
||||||
hookTimeout: 30000,
|
hookTimeout: 30000,
|
||||||
exclude: ['dist', 'dist/**/*', 'node_modules/**'],
|
exclude: ['dist', 'dist/**/*', 'node_modules/**'],
|
||||||
|
setupFiles: ['./vitest.setup.ts'],
|
||||||
|
|
||||||
env: {
|
env: {
|
||||||
PLAYWRITER_NODE_ENV: 'development',
|
PLAYWRITER_NODE_ENV: 'development',
|
||||||
|
|||||||
@@ -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)
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user