Skip to content

Commit da11904

Browse files
committed
test: e2e
1 parent 139a653 commit da11904

3 files changed

Lines changed: 48 additions & 8 deletions

File tree

packages/plugin-rsc/e2e/basic.test.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ function defineTest(f: Fixture) {
415415
await page.getByRole('button', { name: 'client-counter: 0' }).click()
416416
})
417417

418-
test('non-boundary client hmr', async ({ page }) => {
418+
test('non-client-reference client hmr', async ({ page }) => {
419419
await page.goto(f.url())
420420
await waitForHydration(page)
421421

@@ -437,6 +437,38 @@ function defineTest(f: Fixture) {
437437
await expect(locator).toHaveText('test-hmr-client-dep: 0[ok]')
438438
})
439439

440+
test('non-self-accepting client hmr', async ({ page }) => {
441+
await page.goto(f.url())
442+
await waitForHydration(page)
443+
444+
const locator = page.getByTestId('test-hmr-client-dep2')
445+
await expect(locator).toHaveText('test-hmr-client-dep2: 0[ok]')
446+
await locator.locator('button').click()
447+
await expect(locator).toHaveText('test-hmr-client-dep2: 1[ok]')
448+
449+
const editor = f.createEditor('src/routes/hmr-client-dep2/client-dep.ts')
450+
editor.edit((s) => s.replace('[ok]', '[ok-edit]'))
451+
await expect(locator).toHaveText('test-hmr-client-dep2: 1[ok-edit]')
452+
453+
// check next rsc payload includes an updated client reference and preserves state
454+
await page.locator("a[href='?test-hmr-client-dep2-re-render']").click()
455+
await expect(
456+
page.locator("a[href='?test-hmr-client-dep2-re-render']"),
457+
).toHaveText('re-render [ok]')
458+
await expect(locator).toHaveText('test-hmr-client-dep2: 1[ok-edit]')
459+
460+
// check next ssr is updated
461+
const res = await page.request.get(f.url(), {
462+
headers: {
463+
accept: 'text/html',
464+
},
465+
})
466+
expect(await res?.text()).toContain('[ok-edit]')
467+
468+
editor.reset()
469+
await expect(locator).toHaveText('test-hmr-client-dep2: 1[ok]')
470+
})
471+
440472
test('server hmr', async ({ page }) => {
441473
await page.goto(f.url())
442474
await waitForHydration(page)

packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep2/client.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@
33
import React from 'react'
44
import { clientDep } from './client-dep'
55

6-
export function TestHmrClientDep2() {
6+
export function TestHmrClientDep2(props: { url: Pick<URL, 'search'> }) {
77
const [count, setCount] = React.useState(0)
88
return (
9-
<div data-testid="test-hmr-client-dep2">
10-
<button onClick={() => setCount((c) => c + 1)}>
11-
test-hmr-client-dep2: {count}
12-
</button>
13-
{clientDep()} <a href="?test-hmr-client-dep2-re-render">re-render</a>
9+
<div>
10+
<span data-testid="test-hmr-client-dep2">
11+
<button onClick={() => setCount((c) => c + 1)}>
12+
test-hmr-client-dep2: {count}
13+
</button>
14+
{clientDep()}
15+
</span>{' '}
16+
<a href="?test-hmr-client-dep2-re-render">
17+
re-render
18+
{props.url.search.includes('test-hmr-client-dep2-re-render')
19+
? ' [ok]'
20+
: ''}
21+
</a>
1422
</div>
1523
)
1624
}

packages/plugin-rsc/examples/basic/src/routes/root.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export function Root(props: { url: URL }) {
6565
<TestDepCssInServer />
6666
<TestHydrationMismatch url={props.url} />
6767
<TestHmrClientDep />
68-
<TestHmrClientDep2 />
68+
<TestHmrClientDep2 url={{ search: props.url.search }} />
6969
<TestHmrSharedServer />
7070
<TestHmrSharedClient />
7171
<TestHmrSharedAtomic />

0 commit comments

Comments
 (0)