Skip to content

Commit 7ebccc5

Browse files
hi-ogawacodex
andauthored
test(rsc): e2e for server action closure member binding (#1178)
Co-authored-by: Codex <noreply@openai.com>
1 parent 4468e46 commit 7ebccc5

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1404,6 +1404,33 @@ function defineTest(f: Fixture) {
14041404
.click()
14051405
}
14061406

1407+
test('action bind member @js', async ({ page }) => {
1408+
await page.goto(f.url())
1409+
await waitForHydration(page)
1410+
await using _ = await expectNoReload(page)
1411+
await testActionBindMember(page)
1412+
})
1413+
1414+
testNoJs('action bind member @nojs', async ({ page }) => {
1415+
await page.goto(f.url())
1416+
await testActionBindMember(page)
1417+
})
1418+
1419+
async function testActionBindMember(page: Page) {
1420+
await expect(page.getByTestId('test-server-action-bind-member')).toHaveText(
1421+
'[?]',
1422+
)
1423+
await page
1424+
.getByRole('button', { name: 'test-server-action-bind-member' })
1425+
.click()
1426+
await expect(page.getByTestId('test-server-action-bind-member')).toHaveText(
1427+
'true',
1428+
)
1429+
await page
1430+
.getByRole('button', { name: 'test-server-action-bind-reset' })
1431+
.click()
1432+
}
1433+
14071434
test('action bind client @js', async ({ page }) => {
14081435
await page.goto(f.url())
14091436
await waitForHydration(page)

packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export function TestServerActionBindReset() {
1010
action={async () => {
1111
'use server'
1212
testServerActionBindSimpleState = '[?]'
13+
testServerActionBindMemberState = '[?]'
1314
testServerActionBindActionState = '[?]'
1415
testServerActionBindClientState++
1516
}}
@@ -94,3 +95,28 @@ export function TestServerActionBindAction() {
9495
</form>
9596
)
9697
}
98+
99+
let testServerActionBindMemberState = '[?]'
100+
101+
export function TestServerActionBindMember() {
102+
const x = {
103+
y: {
104+
z: 1234,
105+
},
106+
invalid: () => {},
107+
}
108+
109+
return (
110+
<form
111+
action={async () => {
112+
'use server'
113+
testServerActionBindMemberState = JSON.stringify(x.y.z === 1234)
114+
}}
115+
>
116+
<button type="submit">test-server-action-bind-member</button>
117+
<span data-testid="test-server-action-bind-member">
118+
{testServerActionBindMemberState}
119+
</span>
120+
</form>
121+
)
122+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
TestServerActionBindClient,
77
TestServerActionBindReset,
88
TestServerActionBindSimple,
9+
TestServerActionBindMember,
910
} from './action-bind/server'
1011
import { TestServerActionError } from './action-error/server'
1112
import {
@@ -105,6 +106,7 @@ export function Root(props: { url: URL }) {
105106
<TestServerActionBindSimple />
106107
<TestServerActionBindClient />
107108
<TestServerActionBindAction />
109+
<TestServerActionBindMember />
108110
<TestSerializationServer />
109111
<TestClientInServer />
110112
<TestServerInServer />

0 commit comments

Comments
 (0)