-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathperformance.client.test.ts
115 lines (99 loc) · 4.04 KB
/
performance.client.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import { expect, test } from '@playwright/test';
import { waitForTransaction } from '@sentry-internal/test-utils';
import { waitForInitialPageload } from './utils';
test.describe('client-specific performance events', () => {
test('multiple navigations have distinct traces', async ({ page }) => {
const navigationTxn1EventPromise = waitForTransaction('sveltekit-2-svelte-5', txnEvent => {
return txnEvent?.transaction === '/nav1' && txnEvent.contexts?.trace?.op === 'navigation';
});
const navigationTxn2EventPromise = waitForTransaction('sveltekit-2-svelte-5', txnEvent => {
return txnEvent?.transaction === '/' && txnEvent.contexts?.trace?.op === 'navigation';
});
const navigationTxn3EventPromise = waitForTransaction('sveltekit-2-svelte-5', txnEvent => {
return txnEvent?.transaction === '/nav2' && txnEvent.contexts?.trace?.op === 'navigation';
});
await waitForInitialPageload(page);
await page.getByText('Nav 1').click();
const navigationTxn1Event = await navigationTxn1EventPromise;
await page.goBack();
const navigationTxn2Event = await navigationTxn2EventPromise;
await page.getByText('Nav 2').click();
const navigationTxn3Event = await navigationTxn3EventPromise;
expect(navigationTxn1Event).toMatchObject({
transaction: '/nav1',
transaction_info: { source: 'route' },
type: 'transaction',
contexts: {
trace: {
op: 'navigation',
origin: 'auto.navigation.sveltekit',
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
},
},
});
expect(navigationTxn2Event).toMatchObject({
transaction: '/',
transaction_info: { source: 'route' },
type: 'transaction',
contexts: {
trace: {
op: 'navigation',
origin: 'auto.navigation.sveltekit',
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
},
},
});
expect(navigationTxn3Event).toMatchObject({
transaction: '/nav2',
transaction_info: { source: 'route' },
type: 'transaction',
contexts: {
trace: {
op: 'navigation',
origin: 'auto.navigation.sveltekit',
trace_id: expect.stringMatching(/[a-f0-9]{32}/),
},
},
});
// traces should NOT be connected
expect(navigationTxn1Event.contexts?.trace?.trace_id).not.toBe(navigationTxn2Event.contexts?.trace?.trace_id);
expect(navigationTxn2Event.contexts?.trace?.trace_id).not.toBe(navigationTxn3Event.contexts?.trace?.trace_id);
expect(navigationTxn1Event.contexts?.trace?.trace_id).not.toBe(navigationTxn3Event.contexts?.trace?.trace_id);
});
test('records manually added component tracking spans', async ({ page }) => {
const componentTxnEventPromise = waitForTransaction('sveltekit-2-svelte-5', txnEvent => {
return txnEvent?.transaction === '/components';
});
await waitForInitialPageload(page);
await page.getByText('Component Tracking').click();
const componentTxnEvent = await componentTxnEventPromise;
expect(componentTxnEvent.spans).toEqual(
expect.arrayContaining([
expect.objectContaining({
data: { 'sentry.op': 'ui.svelte.init', 'sentry.origin': 'auto.ui.svelte' },
description: '<components/+page>',
op: 'ui.svelte.init',
origin: 'auto.ui.svelte',
}),
expect.objectContaining({
data: { 'sentry.op': 'ui.svelte.init', 'sentry.origin': 'auto.ui.svelte' },
description: '<Component1>',
op: 'ui.svelte.init',
origin: 'auto.ui.svelte',
}),
expect.objectContaining({
data: { 'sentry.op': 'ui.svelte.init', 'sentry.origin': 'auto.ui.svelte' },
description: '<Component2>',
op: 'ui.svelte.init',
origin: 'auto.ui.svelte',
}),
expect.objectContaining({
data: { 'sentry.op': 'ui.svelte.init', 'sentry.origin': 'auto.ui.svelte' },
description: '<Component3>',
op: 'ui.svelte.init',
origin: 'auto.ui.svelte',
}),
]),
);
});
});