Skip to content

Commit 7fb817e

Browse files
nicohrubecclaude
andauthored
test(nuxt): Fix flaky database error test (#20447)
The test asserted on values[0], which flakes when the error arrives as a chained exception. Match by mechanism type instead, so the assertion holds regardless of ordering. Closes #20446 Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 14719e3 commit 7fb817e

3 files changed

Lines changed: 24 additions & 12 deletions

File tree

dev-packages/e2e-tests/test-applications/nuxt-3/tests/database.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ test.describe('database integration', () => {
128128

129129
test('captures database error and marks span as failed', async ({ request }) => {
130130
const errorPromise = waitForError('nuxt-3', errorEvent => {
131-
return !!errorEvent?.exception?.values?.[0]?.value?.includes('no such table');
131+
return !!errorEvent?.exception?.values?.some(
132+
value => value.mechanism?.type === 'auto.db.nuxt' && value.value?.includes('no such table'),
133+
);
132134
});
133135

134136
const transactionPromise = waitForTransaction('nuxt-3', transactionEvent => {
@@ -141,9 +143,11 @@ test.describe('database integration', () => {
141143

142144
const [error, transaction] = await Promise.all([errorPromise, transactionPromise]);
143145

144-
expect(error).toBeDefined();
145-
expect(error.exception?.values?.[0]?.value).toContain('no such table');
146-
expect(error.exception?.values?.[0]?.mechanism).toEqual({
146+
const dbException = error.exception?.values?.find(value => value.mechanism?.type === 'auto.db.nuxt');
147+
148+
expect(dbException).toBeDefined();
149+
expect(dbException?.value).toContain('no such table');
150+
expect(dbException?.mechanism).toEqual({
147151
handled: false,
148152
type: 'auto.db.nuxt',
149153
});

dev-packages/e2e-tests/test-applications/nuxt-4/tests/database.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ test.describe('database integration', () => {
128128

129129
test('captures database error and marks span as failed', async ({ request }) => {
130130
const errorPromise = waitForError('nuxt-4', errorEvent => {
131-
return !!errorEvent?.exception?.values?.[0]?.value?.includes('no such table');
131+
return !!errorEvent?.exception?.values?.some(
132+
value => value.mechanism?.type === 'auto.db.nuxt' && value.value?.includes('no such table'),
133+
);
132134
});
133135

134136
const transactionPromise = waitForTransaction('nuxt-4', transactionEvent => {
@@ -141,9 +143,11 @@ test.describe('database integration', () => {
141143

142144
const [error, transaction] = await Promise.all([errorPromise, transactionPromise]);
143145

144-
expect(error).toBeDefined();
145-
expect(error.exception?.values?.[0]?.value).toContain('no such table');
146-
expect(error.exception?.values?.[0]?.mechanism).toEqual({
146+
const dbException = error.exception?.values?.find(value => value.mechanism?.type === 'auto.db.nuxt');
147+
148+
expect(dbException).toBeDefined();
149+
expect(dbException?.value).toContain('no such table');
150+
expect(dbException?.mechanism).toEqual({
147151
handled: false,
148152
type: 'auto.db.nuxt',
149153
});

dev-packages/e2e-tests/test-applications/nuxt-5/tests/database.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ test.describe('database integration', () => {
128128

129129
test('captures database error and marks span as failed', async ({ request }) => {
130130
const errorPromise = waitForError('nuxt-5', errorEvent => {
131-
return !!errorEvent?.exception?.values?.[0]?.value?.includes('no such table');
131+
return !!errorEvent?.exception?.values?.some(
132+
value => value.mechanism?.type === 'auto.db.nuxt' && value.value?.includes('no such table'),
133+
);
132134
});
133135

134136
const transactionPromise = waitForTransaction('nuxt-5', transactionEvent => {
@@ -141,9 +143,11 @@ test.describe('database integration', () => {
141143

142144
const [error, transaction] = await Promise.all([errorPromise, transactionPromise]);
143145

144-
expect(error).toBeDefined();
145-
expect(error.exception?.values?.[0]?.value).toContain('no such table');
146-
expect(error.exception?.values?.[0]?.mechanism).toEqual({
146+
const dbException = error.exception?.values?.find(value => value.mechanism?.type === 'auto.db.nuxt');
147+
148+
expect(dbException).toBeDefined();
149+
expect(dbException?.value).toContain('no such table');
150+
expect(dbException?.mechanism).toEqual({
147151
handled: false,
148152
type: 'auto.db.nuxt',
149153
});

0 commit comments

Comments
 (0)