Skip to content

Commit 89dbde7

Browse files
authored
test: e2e for next-partial-prerendering example (#758)
1 parent cdb9989 commit 89dbde7

File tree

7 files changed

+45
-3
lines changed

7 files changed

+45
-3
lines changed

examples/common/apps.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const apps = [
88
"vercel-blog-starter",
99
"ssg-app",
1010
"prisma",
11+
"next-partial-prerendering",
1112
// e2e
1213
"app-pages-router",
1314
"app-router",

examples/next-partial-prerendering/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
# testing
1010
/coverage
11+
playwright-report
12+
test-results
1113

1214
# next.js
1315
/.next/

examples/next-partial-prerendering/components/reviews.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function Skeleton() {
4040

4141
export function ReviewsSkeleton() {
4242
return (
43-
<div className="space-y-6">
43+
<div className="space-y-6" data-testid="reviews-loader">
4444
<div className={`h-7 w-2/5 rounded-lg bg-gray-900 ${shimmer}`} />
4545
<div className="space-y-8">
4646
<Skeleton />
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { configurePlaywright } from '../../common/config-e2e';
2+
3+
export default configurePlaywright('next-partial-prerendering');
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { expect, test } from '@playwright/test';
2+
3+
test.describe('PPR', () => {
4+
test('PPR should show loading first', async ({ page }) => {
5+
await page.goto('/', { waitUntil: 'commit' });
6+
await expect(
7+
page.getByRole('heading', { name: 'Partial Prerendering' }),
8+
).toBeVisible();
9+
10+
const loader = page.getByTestId('reviews-loader');
11+
await expect(loader).toBeVisible();
12+
await expect(page.getByText('Customer Reviews')).toHaveCount(0);
13+
14+
await page.waitForTimeout(6000);
15+
await expect(page.getByText('Customer Reviews')).toBeVisible();
16+
await expect(loader).not.toBeVisible();
17+
});
18+
19+
test('PPR rsc prefetch request should be cached', async ({ request }) => {
20+
const resp = await request.get('/', {
21+
headers: { rsc: '1', 'next-router-prefetch': '1' },
22+
});
23+
expect(resp.status()).toEqual(200);
24+
25+
const headers = resp.headers();
26+
expect(headers['x-nextjs-postponed']).toEqual('1');
27+
expect(headers['x-nextjs-cache']).toEqual('HIT');
28+
expect(headers['cache-control']).toEqual(
29+
's-maxage=31536000, stale-while-revalidate=2592000',
30+
);
31+
});
32+
});
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
import { defineCloudflareConfig } from '@opennextjs/cloudflare/config';
2+
import staticAssetsIncrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/static-assets-incremental-cache';
23

3-
export default defineCloudflareConfig();
4+
export default defineCloudflareConfig({
5+
incrementalCache: staticAssetsIncrementalCache,
6+
});

examples/next-partial-prerendering/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"start": "next start",
88
"build:worker": "pnpm opennextjs-cloudflare build",
99
"preview:worker": "pnpm opennextjs-cloudflare preview",
10-
"preview": "pnpm build:worker && pnpm preview:worker"
10+
"preview": "pnpm build:worker && pnpm preview:worker",
11+
"e2e": "playwright test -c e2e/playwright.config.ts"
1112
},
1213
"dependencies": {
1314
"@heroicons/react": "2.1.5",

0 commit comments

Comments
 (0)