From 74755e51d87a3f19e61cd4740102309cc5ec0263 Mon Sep 17 00:00:00 2001 From: Jonathan Baldie Date: Sat, 2 May 2026 09:47:06 +0100 Subject: [PATCH] fix Cypress component debug hook registration --- client/cypress.config.js | 52 ++++++++++++++--------------- client/cypress/support/component.js | 28 +++++++++------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/client/cypress.config.js b/client/cypress.config.js index 324234b9..c79e8804 100644 --- a/client/cypress.config.js +++ b/client/cypress.config.js @@ -5,36 +5,36 @@ module.exports = defineConfig({ env: { ABS_CYPRESS_DEBUG_BROWSER: false }, - e2e: { - setupNodeEvents(on, config) { - on('task', { - absCypressDebug(payload) { - const prefix = `[cypress:${payload.type}]` - const message = typeof payload.message === 'string' ? payload.message : JSON.stringify(payload.message) - const details = payload.details ? `\n${payload.details}` : '' + setupNodeEvents(on, config) { + on('task', { + absCypressDebug(payload) { + const prefix = `[cypress:${payload.type}]` + const message = typeof payload.message === 'string' ? payload.message : JSON.stringify(payload.message) + const details = payload.details ? `\n${payload.details}` : '' - // Surface browser-side failures in terminal output for focused debug runs. - console.error(`${prefix} ${message}${details}`) - return null - } - }) - - on('before:browser:launch', (browser, launchOptions) => { - if (!config.env.ABS_CYPRESS_DEBUG_BROWSER) { - return launchOptions - } - - if (browser.family === 'chromium') { - launchOptions.args.push('--auto-open-devtools-for-tabs') - launchOptions.args.push('--enable-logging=stderr') - launchOptions.args.push('--v=1') - } + // Surface browser-side failures in terminal output for focused debug runs. + console.error(`${prefix} ${message}${details}`) + return null + } + }) + on('before:browser:launch', (browser, launchOptions) => { + if (!config.env.ABS_CYPRESS_DEBUG_BROWSER) { return launchOptions - }) + } - return config - } + if (browser.family === 'chromium') { + launchOptions.args.push('--auto-open-devtools-for-tabs') + launchOptions.args.push('--enable-logging=stderr') + launchOptions.args.push('--v=1') + } + + return launchOptions + }) + + return config + }, + e2e: { }, component: { devServer: { diff --git a/client/cypress/support/component.js b/client/cypress/support/component.js index ac78cb25..8ba9fb80 100644 --- a/client/cypress/support/component.js +++ b/client/cypress/support/component.js @@ -49,20 +49,24 @@ const forwardBrowserDebug = (type, message, details) => { }, { log: false }) } -window.addEventListener('error', (event) => { - forwardBrowserDebug('window-error', event.message || 'Unhandled window error', event.error) -}) +if (!window.__absCypressDebugListenersRegistered) { + window.addEventListener('error', (event) => { + forwardBrowserDebug('window-error', event.message || 'Unhandled window error', event.error) + }) -window.addEventListener('unhandledrejection', (event) => { - const reason = event.reason - const message = reason?.message || 'Unhandled promise rejection' - forwardBrowserDebug('unhandledrejection', message, reason) -}) + window.addEventListener('unhandledrejection', (event) => { + const reason = event.reason + const message = reason?.message || 'Unhandled promise rejection' + forwardBrowserDebug('unhandledrejection', message, reason) + }) -Cypress.on('fail', (error, runnable) => { - forwardBrowserDebug('cypress-fail', `${runnable?.fullTitle?.() || 'Unknown test'} failed`, error) - throw error -}) + Cypress.on('fail', (error, runnable) => { + forwardBrowserDebug('cypress-fail', `${runnable?.fullTitle?.() || 'Unknown test'} failed`, error) + throw error + }) + + window.__absCypressDebugListenersRegistered = true +} //Cypress.Commands.add('mount', mount) Cypress.Commands.add('mount', (component, options = {}) => {