From 47546a496db11896d2482b7f3f57f0e7bbb0edf2 Mon Sep 17 00:00:00 2001 From: Nicolas Hrubec Date: Wed, 22 Apr 2026 12:27:48 +0200 Subject: [PATCH] test(nuxt): Fix flaky database error test Find the exception by mechanism type instead of relying on positional `values[0]`, which is fragile when the error arrives as a chained exception. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../test-applications/nuxt-3/tests/database.test.ts | 12 ++++++++---- .../test-applications/nuxt-4/tests/database.test.ts | 12 ++++++++---- .../test-applications/nuxt-5/tests/database.test.ts | 12 ++++++++---- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/nuxt-3/tests/database.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-3/tests/database.test.ts index ecb0e32133db..f7635e6e06c9 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-3/tests/database.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-3/tests/database.test.ts @@ -128,7 +128,9 @@ test.describe('database integration', () => { test('captures database error and marks span as failed', async ({ request }) => { const errorPromise = waitForError('nuxt-3', errorEvent => { - return !!errorEvent?.exception?.values?.[0]?.value?.includes('no such table'); + return !!errorEvent?.exception?.values?.some( + value => value.mechanism?.type === 'auto.db.nuxt' && value.value?.includes('no such table'), + ); }); const transactionPromise = waitForTransaction('nuxt-3', transactionEvent => { @@ -141,9 +143,11 @@ test.describe('database integration', () => { const [error, transaction] = await Promise.all([errorPromise, transactionPromise]); - expect(error).toBeDefined(); - expect(error.exception?.values?.[0]?.value).toContain('no such table'); - expect(error.exception?.values?.[0]?.mechanism).toEqual({ + const dbException = error.exception?.values?.find(value => value.mechanism?.type === 'auto.db.nuxt'); + + expect(dbException).toBeDefined(); + expect(dbException?.value).toContain('no such table'); + expect(dbException?.mechanism).toEqual({ handled: false, type: 'auto.db.nuxt', }); diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/database.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/database.test.ts index 9b9fdd892563..a74df938bc32 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/database.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/database.test.ts @@ -128,7 +128,9 @@ test.describe('database integration', () => { test('captures database error and marks span as failed', async ({ request }) => { const errorPromise = waitForError('nuxt-4', errorEvent => { - return !!errorEvent?.exception?.values?.[0]?.value?.includes('no such table'); + return !!errorEvent?.exception?.values?.some( + value => value.mechanism?.type === 'auto.db.nuxt' && value.value?.includes('no such table'), + ); }); const transactionPromise = waitForTransaction('nuxt-4', transactionEvent => { @@ -141,9 +143,11 @@ test.describe('database integration', () => { const [error, transaction] = await Promise.all([errorPromise, transactionPromise]); - expect(error).toBeDefined(); - expect(error.exception?.values?.[0]?.value).toContain('no such table'); - expect(error.exception?.values?.[0]?.mechanism).toEqual({ + const dbException = error.exception?.values?.find(value => value.mechanism?.type === 'auto.db.nuxt'); + + expect(dbException).toBeDefined(); + expect(dbException?.value).toContain('no such table'); + expect(dbException?.mechanism).toEqual({ handled: false, type: 'auto.db.nuxt', }); diff --git a/dev-packages/e2e-tests/test-applications/nuxt-5/tests/database.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-5/tests/database.test.ts index 331b41d90ccf..ec7102449617 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-5/tests/database.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-5/tests/database.test.ts @@ -128,7 +128,9 @@ test.describe('database integration', () => { test('captures database error and marks span as failed', async ({ request }) => { const errorPromise = waitForError('nuxt-5', errorEvent => { - return !!errorEvent?.exception?.values?.[0]?.value?.includes('no such table'); + return !!errorEvent?.exception?.values?.some( + value => value.mechanism?.type === 'auto.db.nuxt' && value.value?.includes('no such table'), + ); }); const transactionPromise = waitForTransaction('nuxt-5', transactionEvent => { @@ -141,9 +143,11 @@ test.describe('database integration', () => { const [error, transaction] = await Promise.all([errorPromise, transactionPromise]); - expect(error).toBeDefined(); - expect(error.exception?.values?.[0]?.value).toContain('no such table'); - expect(error.exception?.values?.[0]?.mechanism).toEqual({ + const dbException = error.exception?.values?.find(value => value.mechanism?.type === 'auto.db.nuxt'); + + expect(dbException).toBeDefined(); + expect(dbException?.value).toContain('no such table'); + expect(dbException?.mechanism).toEqual({ handled: false, type: 'auto.db.nuxt', });