Restrict Cypress uncaught exception suppression to known benign errors

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
2026-03-08 13:49:51 +08:00
parent fc43ca67ca
commit d5464ebc2d
3 changed files with 62 additions and 3 deletions

View File

@@ -20,9 +20,11 @@
// Import commands.js using ES2015 syntax:
import "./commands";
Cypress.on("uncaught:exception", (err, runnable) => {
// returning false here prevents Cypress from failing the test
return false;
import { getCypressUncaughtExceptionDecision } from "./uncaughtExceptionPolicy";
Cypress.on("uncaught:exception", (error) => {
// Ignore only known benign browser/runtime noise; fail all other app errors.
return getCypressUncaughtExceptionDecision(error);
});
// Alternatively you can use CommonJS syntax:

View File

@@ -0,0 +1,26 @@
// The Lucia project.
// Copyright 2026-2026 DSP, inc. All rights reserved.
// Authors:
// imacat.yang@dsp.im (imacat), 2026/03/08
/**
* Returns whether an uncaught exception should be ignored in Cypress.
* @param {unknown} error - The thrown uncaught exception.
* @returns {boolean} True when the exception is known-benign and safe to ignore.
*/
export function shouldIgnoreUncaughtException(error) {
const message = error instanceof Error ? error.message : String(error);
const ignorePatterns = [
/ResizeObserver loop limit exceeded/i,
/ResizeObserver loop completed with undelivered notifications/i,
];
return ignorePatterns.some((pattern) => pattern.test(message));
}
/**
* Converts ignore policy into Cypress uncaught-exception callback return value.
* @param {unknown} error - The thrown uncaught exception.
* @returns {false|undefined} False to ignore, undefined to let Cypress fail the test.
*/
export function getCypressUncaughtExceptionDecision(error) {
return shouldIgnoreUncaughtException(error) ? false : undefined;
}