Skip to content

Commit 9f024f4

Browse files
committed
add unit test
1 parent ec52e0d commit 9f024f4

File tree

1 file changed

+47
-2
lines changed

1 file changed

+47
-2
lines changed

packages/sveltekit/test/server/handle.test.ts

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ function mockEvent(override: Record<string, unknown> = {}): Parameters<Handle>[0
4343
isDataRequest: false,
4444

4545
...override,
46-
isSubRequest: false,
4746
};
4847

4948
return event;
@@ -118,7 +117,6 @@ describe('sentryHandle', () => {
118117
response = await sentryHandle()({ event: mockEvent(), resolve: resolve(type, isError) });
119118
} catch (e) {
120119
expect(e).toBeInstanceOf(Error);
121-
// @ts-expect-error - this is fine
122120
expect(e.message).toEqual(type);
123121
}
124122

@@ -152,6 +150,53 @@ describe('sentryHandle', () => {
152150
expect(spans).toHaveLength(1);
153151
});
154152

153+
it('[kit>=1.21.0] creates a child span for nested server calls (i.e. if there is an active span)', async () => {
154+
let _span: Span | undefined = undefined;
155+
let txnCount = 0;
156+
client.on('spanEnd', span => {
157+
if (span === getRootSpan(span)) {
158+
_span = span;
159+
++txnCount;
160+
}
161+
});
162+
163+
try {
164+
await sentryHandle()({
165+
event: mockEvent(),
166+
resolve: async _ => {
167+
// simulateing a nested load call:
168+
await sentryHandle()({
169+
event: mockEvent({ route: { id: 'api/users/details/[id]', isSubRequest: true } }),
170+
resolve: resolve(type, isError),
171+
});
172+
return mockResponse;
173+
},
174+
});
175+
} catch (e) {
176+
//
177+
}
178+
179+
expect(txnCount).toEqual(1);
180+
expect(_span!).toBeDefined();
181+
182+
expect(spanToJSON(_span!).description).toEqual('GET /users/[id]');
183+
expect(spanToJSON(_span!).op).toEqual('http.server');
184+
expect(spanToJSON(_span!).status).toEqual(isError ? 'internal_error' : 'ok');
185+
expect(spanToJSON(_span!).data?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toEqual('route');
186+
187+
expect(spanToJSON(_span!).timestamp).toBeDefined();
188+
189+
const spans = getSpanDescendants(_span!).map(spanToJSON);
190+
191+
expect(spans).toHaveLength(2);
192+
expect(spans).toEqual(
193+
expect.arrayContaining([
194+
expect.objectContaining({ op: 'http.server', description: 'GET /users/[id]' }),
195+
expect.objectContaining({ op: 'http.server', description: 'GET api/users/details/[id]' }),
196+
]),
197+
);
198+
});
199+
155200
it('creates a child span for nested server calls (i.e. if there is an active span)', async () => {
156201
let _span: Span | undefined = undefined;
157202
let txnCount = 0;

0 commit comments

Comments
 (0)