Skip to content

Commit e78f851

Browse files
committed
test: deflake middeware navigation tests by waiting for hydration before clicking links
1 parent cb2128f commit e78f851

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

tests/e2e/middleware.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,11 @@ for (const { expectedRuntime, isNodeMiddleware, label, testWithSwitchableMiddlew
246246
const pageResponse = await page.goto(`${edgeOrNodeMiddlewarePages.url}/link`)
247247
expect(await pageResponse?.headerValue('x-runtime')).toEqual(expectedRuntime)
248248

249+
// wait for hydration to finish before doing client navigation
250+
await expect(page.getByTestId('hydration')).toHaveText('hydrated', {
251+
timeout: 10_000,
252+
})
253+
249254
await page.evaluate(() => {
250255
// set some value to window to check later if browser did reload and lost this state
251256
;(window as ExtendedWindow).didReload = false
@@ -305,6 +310,11 @@ for (const { expectedRuntime, isNodeMiddleware, label, testWithSwitchableMiddlew
305310
)
306311
expect(await pageResponse?.headerValue('x-runtime')).toEqual(expectedRuntime)
307312

313+
// wait for hydration to finish before doing client navigation
314+
await expect(page.getByTestId('hydration')).toHaveText('hydrated', {
315+
timeout: 10_000,
316+
})
317+
308318
await page.evaluate(() => {
309319
// set some value to window to check later if browser did reload and lost this state
310320
;(window as ExtendedWindow).didReload = false

tests/fixtures/middleware-i18n/pages/link/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
import { useState, useEffect } from 'react'
12
import Link from 'next/link'
23

34
export default function Page() {
5+
const [isHydrated, setIsHydrated] = useState(false)
6+
useEffect(() => {
7+
setIsHydrated(true)
8+
}, [])
9+
410
return (
511
<div>
612
<h1>Page with Links</h1>
@@ -62,6 +68,7 @@ export default function Page() {
6268
</ul>
6369
</li>
6470
</ul>
71+
<pre data-testid="hydration">{isHydrated ? 'hydrated' : 'hydrating'}</pre>
6572
</div>
6673
)
6774
}

tests/fixtures/middleware-pages/pages/link/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
import { useState, useEffect } from 'react'
12
import Link from 'next/link'
23

34
export default function Page() {
5+
const [isHydrated, setIsHydrated] = useState(false)
6+
useEffect(() => {
7+
setIsHydrated(true)
8+
}, [])
9+
410
return (
511
<div>
612
<h1>Page with Links</h1>
@@ -62,6 +68,7 @@ export default function Page() {
6268
</ul>
6369
</li>
6470
</ul>
71+
<pre data-testid="hydration">{isHydrated ? 'hydrated' : 'hydrating'}</pre>
6572
</div>
6673
)
6774
}

0 commit comments

Comments
 (0)