Skip to content

Commit 44089e7

Browse files
committed
test: simplify
1 parent dbfdc16 commit 44089e7

File tree

3 files changed

+35
-98
lines changed

3 files changed

+35
-98
lines changed

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

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,40 +1007,16 @@ function defineTest(f: Fixture) {
10071007
)
10081008
})
10091009

1010-
test('react cache function', async ({ page }) => {
1010+
test('React.cache', async ({ page }) => {
10111011
await page.goto(f.url())
10121012
await waitForHydration(page)
1013-
const locator = page.getByTestId('test-react-cache-fn')
1014-
1015-
// Just verify the functionality exists and works
1016-
await expect(locator.locator('span')).toContainText('actionCount:')
1017-
await expect(locator.locator('span')).toContainText('cacheFnCount:')
1018-
1019-
// Click button and verify counters update
1020-
await locator.getByRole('button').click()
1021-
await expect(locator.locator('span')).toContainText('actionCount:')
1022-
await expect(locator.locator('span')).toContainText('cacheFnCount:')
1023-
1024-
// Test with different argument
1025-
await locator.getByRole('textbox').fill('test-arg')
1026-
await locator.getByRole('button').click()
1027-
await expect(locator.locator('span')).toContainText('actionCount:')
1028-
await expect(locator.locator('span')).toContainText('cacheFnCount:')
1029-
})
1030-
1031-
test('react cache component', async ({ page }) => {
1032-
await page.goto(f.url())
1033-
await waitForHydration(page)
1034-
1035-
// Check that the React.cache test components are rendered
1036-
await expect(page.getByTestId('test-react-cache-component')).toBeVisible()
1037-
await expect(page.getByTestId('test-react-cache-basic')).toContainText(
1038-
'React.cache basic test:',
1013+
await page.getByRole('link', { name: 'test-react-cache' }).click()
1014+
await expect(page.getByTestId('test-react-cache-result')).toHaveText(
1015+
'(cacheFnCount = 2, nonCacheFnCount = 3)',
1016+
)
1017+
await page.reload()
1018+
await expect(page.getByTestId('test-react-cache-result')).toHaveText(
1019+
'(cacheFnCount = 4, nonCacheFnCount = 6)',
10391020
)
1040-
1041-
// Check that the async inner component loads
1042-
await expect(
1043-
page.getByTestId('test-react-cache-async-inner'),
1044-
).toContainText('Async inner: cacheFnCount =')
10451021
})
10461022
}
Lines changed: 26 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,41 @@
11
import React from 'react'
22

3-
export function TestReactCache() {
4-
return (
5-
<>
6-
<TestReactCacheFn />
7-
<TestReactCacheComponent />
8-
</>
9-
)
10-
}
11-
12-
// Use module-level state but reset it for clean tests
13-
function resetCounters() {
14-
actionCount = 0
15-
cacheFnCount = 0
16-
}
3+
export async function TestReactCache(props: { url: URL }) {
4+
if (props.url.searchParams.has('test-react-cache')) {
5+
await Promise.all([
6+
testCacheFn('test1'),
7+
testCacheFn('test2'),
8+
testCacheFn('test1'),
9+
testNonCacheFn('test1'),
10+
testNonCacheFn('test2'),
11+
testNonCacheFn('test1'),
12+
])
13+
} else {
14+
cacheFnCount = 0
15+
nonCacheFnCount = 0
16+
}
1717

18-
function TestReactCacheFn() {
1918
return (
20-
<form
21-
data-testid="test-react-cache-fn"
22-
action={async (formData) => {
23-
'use server'
24-
const reset = formData.get('reset')
25-
if (reset === 'true') {
26-
resetCounters()
27-
return
28-
}
29-
actionCount++
30-
const argument = formData.get('argument') || 'default'
31-
await testCacheFn(argument)
32-
}}
33-
>
34-
<button>test-react-cache-fn</button>
35-
<input className="w-25" name="argument" placeholder="argument" />
36-
<input type="hidden" name="reset" value="false" />
37-
<span>
38-
(actionCount: {actionCount}, cacheFnCount: {cacheFnCount})
19+
<div data-testid="test-react-cache">
20+
<a href="?test-react-cache">test-react-cache</a>{' '}
21+
<span data-testid="test-react-cache-result">
22+
(cacheFnCount = {cacheFnCount}, nonCacheFnCount = {nonCacheFnCount})
3923
</span>
40-
</form>
24+
</div>
4125
)
4226
}
4327

44-
let actionCount = 0
4528
let cacheFnCount = 0
29+
let nonCacheFnCount = 0
4630

47-
const testCacheFn = React.cache(async (arg: unknown) => {
31+
const testCacheFn = React.cache(async (...args: unknown[]) => {
32+
console.log('[cached:args]', args)
4833
cacheFnCount++
49-
// Simulate async work
5034
await new Promise((resolve) => setTimeout(resolve, 20))
51-
return arg
5235
})
5336

54-
function TestReactCacheComponent() {
55-
// Similar to the external reference, create a simple demonstration
56-
const timestamp = new Date().toISOString()
57-
58-
return (
59-
<div data-testid="test-react-cache-component">
60-
<div data-testid="test-react-cache-basic">
61-
React.cache basic test: {timestamp}
62-
</div>
63-
<React.Suspense fallback={<div>Loading...</div>}>
64-
<TestReactCacheAsyncInner />
65-
</React.Suspense>
66-
</div>
67-
)
68-
}
69-
70-
async function TestReactCacheAsyncInner() {
71-
// Call cached function - in server components React.cache should work within the same request
72-
await testCacheFn('constant-arg')
73-
await testCacheFn('constant-arg') // Should use cache
74-
75-
return (
76-
<div data-testid="test-react-cache-async-inner">
77-
Async inner: cacheFnCount = {cacheFnCount}
78-
</div>
79-
)
37+
const testNonCacheFn = async (...args: unknown[]) => {
38+
console.log('[not-cached:args]', args)
39+
nonCacheFnCount++
40+
await new Promise((resolve) => setTimeout(resolve, 20))
8041
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export function Root(props: { url: URL }) {
7676
<TestModuleInvalidationServer />
7777
<TestBrowserOnly />
7878
<TestUseCache />
79-
<TestReactCache />
79+
<TestReactCache url={props.url} />
8080
</body>
8181
</html>
8282
)

0 commit comments

Comments
 (0)