Skip to content

Commit 7e8e01c

Browse files
committed
test: add middleware error test
1 parent 2f9d355 commit 7e8e01c

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
import { defineHandler, setResponseHeader } from 'nitro/h3';
1+
import { defineHandler, getQuery, setResponseHeader } from 'nitro/h3';
22

33
export default defineHandler(event => {
4-
// Simple middleware that adds a custom header to verify it ran
54
setResponseHeader(event, 'x-sentry-test-middleware', 'executed');
5+
6+
const query = getQuery(event);
7+
if (query['middleware-error'] === '1') {
8+
throw new Error('Middleware error');
9+
}
610
});

dev-packages/e2e-tests/test-applications/nitro-3/tests/middleware.test.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { expect, test } from '@playwright/test';
2-
import { waitForTransaction } from '@sentry-internal/test-utils';
2+
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';
33

44
test('Creates middleware spans for requests', async ({ request }) => {
55
const transactionEventPromise = waitForTransaction('nitro-3', event => {
@@ -18,3 +18,23 @@ test('Creates middleware spans for requests', async ({ request }) => {
1818
);
1919
expect(h3MiddlewareSpans?.length).toBeGreaterThanOrEqual(1);
2020
});
21+
22+
test('Captures errors thrown in middleware with error status on span', async ({ request }) => {
23+
const errorEventPromise = waitForError('nitro-3', event => {
24+
return !event.type && !!event.exception?.values?.some(v => v.value === 'Middleware error');
25+
});
26+
27+
const transactionEventPromise = waitForTransaction('nitro-3', event => {
28+
return event?.transaction === 'GET /api/test-transaction' && event?.contexts?.trace?.status === 'internal_error';
29+
});
30+
31+
await request.get('/api/test-transaction?middleware-error=1');
32+
33+
const errorEvent = await errorEventPromise;
34+
expect(errorEvent.exception?.values?.some(v => v.value === 'Middleware error')).toBe(true);
35+
36+
const transactionEvent = await transactionEventPromise;
37+
38+
// The transaction span should have error status
39+
expect(transactionEvent.contexts?.trace?.status).toBe('internal_error');
40+
});

0 commit comments

Comments
 (0)