Skip to content

Commit ecf4dab

Browse files
committed
update tests for next13
1 parent 4fec975 commit ecf4dab

File tree

3 files changed

+58
-37
lines changed

3 files changed

+58
-37
lines changed
Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { expect, test } from '@playwright/test';
22
import { waitForTransaction } from '@sentry-internal/test-utils';
3+
import { isNext13 } from './nextjsVersion';
34

45
test('Will create a transaction with spans for every server component and metadata generation functions when visiting a page', async ({
56
page,
@@ -14,17 +15,20 @@ test('Will create a transaction with spans for every server component and metada
1415
return span.description;
1516
});
1617

17-
expect(spanDescriptions).toContainEqual('resolve page components');
1818
expect(spanDescriptions).toContainEqual('render route (app) /nested-layout');
19-
expect(spanDescriptions).toContainEqual('build component tree');
20-
expect(spanDescriptions).toContainEqual('resolve root layout server component');
21-
expect(spanDescriptions).toContainEqual('resolve layout server component "(nested-layout)"');
22-
expect(spanDescriptions).toContainEqual('resolve layout server component "nested-layout"');
23-
expect(spanDescriptions).toContainEqual('resolve page server component "/nested-layout"');
2419
expect(spanDescriptions).toContainEqual('generateMetadata /(nested-layout)/nested-layout/page');
2520
expect(spanDescriptions).toContainEqual('Page.generateMetadata (/(nested-layout)/nested-layout)');
26-
expect(spanDescriptions).toContainEqual('start response');
27-
expect(spanDescriptions).toContainEqual('NextNodeServer.clientComponentLoading');
21+
22+
// Next.js 13 has limited OTEL support for server components, so we don't expect to see the following spans
23+
if (!isNext13) {
24+
expect(spanDescriptions).toContainEqual('resolve page components');
25+
expect(spanDescriptions).toContainEqual('build component tree');
26+
expect(spanDescriptions).toContainEqual('resolve root layout server component');
27+
expect(spanDescriptions).toContainEqual('resolve layout server component "(nested-layout)"');
28+
expect(spanDescriptions).toContainEqual('resolve layout server component "nested-layout"');
29+
expect(spanDescriptions).toContainEqual('resolve page server component "/nested-layout"');
30+
expect(spanDescriptions).toContainEqual('start response');
31+
}
2832
});
2933

3034
test('Will create a transaction with spans for every server component and metadata generation functions when visiting a dynamic page', async ({
@@ -41,16 +45,19 @@ test('Will create a transaction with spans for every server component and metada
4145
return span.description;
4246
});
4347

44-
expect(spanDescriptions).toContainEqual('resolve page components');
4548
expect(spanDescriptions).toContainEqual('render route (app) /nested-layout/[dynamic]');
46-
expect(spanDescriptions).toContainEqual('build component tree');
47-
expect(spanDescriptions).toContainEqual('resolve root layout server component');
48-
expect(spanDescriptions).toContainEqual('resolve layout server component "(nested-layout)"');
49-
expect(spanDescriptions).toContainEqual('resolve layout server component "nested-layout"');
50-
expect(spanDescriptions).toContainEqual('resolve layout server component "[dynamic]"');
51-
expect(spanDescriptions).toContainEqual('resolve page server component "/nested-layout/[dynamic]"');
5249
expect(spanDescriptions).toContainEqual('generateMetadata /(nested-layout)/nested-layout/[dynamic]/page');
5350
expect(spanDescriptions).toContainEqual('Page.generateMetadata (/(nested-layout)/nested-layout/[dynamic])');
54-
expect(spanDescriptions).toContainEqual('start response');
55-
expect(spanDescriptions).toContainEqual('NextNodeServer.clientComponentLoading');
51+
52+
// Next.js 13 has limited OTEL support for server components, so we don't expect to see the following spans
53+
if (!isNext13) {
54+
expect(spanDescriptions).toContainEqual('resolve page components');
55+
expect(spanDescriptions).toContainEqual('build component tree');
56+
expect(spanDescriptions).toContainEqual('resolve root layout server component');
57+
expect(spanDescriptions).toContainEqual('resolve layout server component "(nested-layout)"');
58+
expect(spanDescriptions).toContainEqual('resolve layout server component "nested-layout"');
59+
expect(spanDescriptions).toContainEqual('resolve layout server component "[dynamic]"');
60+
expect(spanDescriptions).toContainEqual('resolve page server component "/nested-layout/[dynamic]"');
61+
expect(spanDescriptions).toContainEqual('start response');
62+
}
5663
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const packageJson = require('../package.json');
2+
const nextjsVersion = packageJson.dependencies.next;
3+
const nextjsMajor = Number(nextjsVersion.split('.')[0]);
4+
5+
export const isNext13 = !isNaN(nextjsMajor) && nextjsMajor === 13;
6+
export const nextjsMajorVersion = nextjsMajor;
7+

dev-packages/e2e-tests/test-applications/nextjs-app-dir/tests/server-components.test.ts

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { expect, test } from '@playwright/test';
22
import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';
3+
import { isNext13 } from './nextjsVersion';
34

45
test('Sends a transaction for a request to app router', async ({ page }) => {
56
const serverComponentTransactionPromise = waitForTransaction('nextjs-app-dir', transactionEvent => {
@@ -79,17 +80,20 @@ test('Should set a "not_found" status on a server component span when notFound()
7980
}),
8081
);
8182

82-
// Page server component span should have the right name and attributes
83-
expect(transactionEvent.spans).toContainEqual(
84-
expect.objectContaining({
85-
description: 'resolve page server component "/server-component/not-found"',
86-
op: 'function.nextjs',
87-
data: expect.objectContaining({
88-
'sentry.nextjs.ssr.function.type': 'Page',
89-
'sentry.nextjs.ssr.function.route': '/server-component/not-found',
83+
// Next.js 13 has limited OTEL support for server components, so we don't expect to see the following span
84+
if (!isNext13) {
85+
// Page server component span should have the right name and attributes
86+
expect(transactionEvent.spans).toContainEqual(
87+
expect.objectContaining({
88+
description: 'resolve page server component "/server-component/not-found"',
89+
op: 'function.nextjs',
90+
data: expect.objectContaining({
91+
'sentry.nextjs.ssr.function.type': 'Page',
92+
'sentry.nextjs.ssr.function.route': '/server-component/not-found',
93+
}),
9094
}),
91-
}),
92-
);
95+
);
96+
}
9397
});
9498

9599
test('Should capture an error and transaction for a app router page', async ({ page }) => {
@@ -118,17 +122,20 @@ test('Should capture an error and transaction for a app router page', async ({ p
118122
}),
119123
);
120124

121-
// The page server component span should have the right name and attributes
122-
expect(transactionEvent.spans).toContainEqual(
123-
expect.objectContaining({
124-
description: 'resolve page server component "/server-component/faulty"',
125-
op: 'function.nextjs',
126-
data: expect.objectContaining({
127-
'sentry.nextjs.ssr.function.type': 'Page',
128-
'sentry.nextjs.ssr.function.route': '/server-component/faulty',
125+
// Next.js 13 has limited OTEL support for server components, so we don't expect to see the following span
126+
if (!isNext13) {
127+
// The page server component span should have the right name and attributes
128+
expect(transactionEvent.spans).toContainEqual(
129+
expect.objectContaining({
130+
description: 'resolve page server component "/server-component/faulty"',
131+
op: 'function.nextjs',
132+
data: expect.objectContaining({
133+
'sentry.nextjs.ssr.function.type': 'Page',
134+
'sentry.nextjs.ssr.function.route': '/server-component/faulty',
135+
}),
129136
}),
130-
}),
131-
);
137+
);
138+
}
132139

133140
expect(errorEvent.tags?.['my-isolated-tag']).toBe(true);
134141
expect(errorEvent.tags?.['my-global-scope-isolated-tag']).not.toBeDefined();

0 commit comments

Comments
 (0)