Skip to content

Commit c581f30

Browse files
committed
test: added async metadata test
1 parent fe47a8e commit c581f30

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import * as Sentry from '@sentry/nextjs';
2+
3+
function fetchPost() {
4+
return Promise.resolve({ id: '1', title: 'Post 1' });
5+
}
6+
7+
export async function generateMetadata() {
8+
const { id } = await fetchPost();
9+
const product = `Product: ${id}`;
10+
11+
return {
12+
title: product,
13+
};
14+
}
15+
16+
export default function Page() {
17+
return (
18+
<>
19+
<h1>This will be pre-rendered</h1>
20+
<DynamicContent />
21+
</>
22+
);
23+
}
24+
25+
async function DynamicContent() {
26+
const getTodos = async () => {
27+
return Sentry.startSpan({ name: 'getTodos', op: 'get.todos' }, async () => {
28+
'use cache';
29+
await new Promise(resolve => setTimeout(resolve, 100));
30+
return [1, 2, 3, 4, 5];
31+
});
32+
};
33+
34+
const todos = await getTodos();
35+
36+
return <div id="todos-fetched">Todos fetched: {todos.length}</div>;
37+
}

dev-packages/e2e-tests/test-applications/nextjs-16-cacheComponents/tests/cacheComponents.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,16 @@ test('Should generate metadata', async ({ page }) => {
3939
await expect(page.locator('#todos-fetched')).toHaveText('Todos fetched: 5');
4040
await expect(page).toHaveTitle('Cache Components Metadata Test');
4141
});
42+
43+
test('Should generate metadata async', async ({ page }) => {
44+
const serverTxPromise = waitForTransaction('nextjs-16-cacheComponents', async transactionEvent => {
45+
return transactionEvent.contexts?.trace?.op === 'http.server';
46+
});
47+
48+
await page.goto('/metadata-async');
49+
const serverTx = await serverTxPromise;
50+
51+
expect(serverTx.spans?.filter(span => span.op === 'get.todos')).toHaveLength(0);
52+
await expect(page.locator('#todos-fetched')).toHaveText('Todos fetched: 5');
53+
await expect(page).toHaveTitle('Product: 1');
54+
});

0 commit comments

Comments
 (0)