e970e050a9
Reland #54403 Also modifies the implementation of #55950 to not change the prefetch behavior when there is flight router state - we should only check the entire loader tree in the static prefetch case, otherwise we're inadvertently rendering the component tree for prefetches that match the current flight router state segment. ([slack x-ref](https://vercel.slack.com/archives/C03S8ED1DKM/p1695862974745849)) This includes a few other misc fixes for static prefetch generation: - `next start` was not serving them (which also meant tests weren't catching a few small bugs) - the router cache key casing can differ between build and runtime, resulting in a bad cache lookup which results suspending indefinitely during navigation - We cannot generate static prefetches for pages that opt into `searchParams`, as the prefetch response won't have the right cache key in the RSC payload - Layouts that use headers/cookies shouldn't use a static prefetch because it can result in unexpected behavior (ie, being redirected to a login page, if the prefetch contains redirect logic for unauthed users) Closes NEXT-1665 Closes NEXT-1643
39 lines
1 KiB
TypeScript
39 lines
1 KiB
TypeScript
import { createNextDescribe } from 'e2e-utils'
|
|
import { waitFor } from 'next-test-utils'
|
|
|
|
createNextDescribe(
|
|
'app-prefetch-static',
|
|
{
|
|
files: __dirname,
|
|
},
|
|
({ next, isNextDev }) => {
|
|
if (isNextDev) {
|
|
it('should skip next dev', () => {})
|
|
return
|
|
}
|
|
|
|
it('should correctly navigate between static & dynamic pages', async () => {
|
|
const browser = await next.browser('/')
|
|
// Ensure the page is prefetched
|
|
await waitFor(1000)
|
|
|
|
await browser.elementByCss('#static-prefetch').click()
|
|
|
|
expect(await browser.elementByCss('#static-prefetch-page').text()).toBe(
|
|
'Hello from Static Prefetch Page'
|
|
)
|
|
|
|
await browser.elementByCss('#dynamic-prefetch').click()
|
|
|
|
expect(await browser.elementByCss('#dynamic-prefetch-page').text()).toBe(
|
|
'Hello from Dynamic Prefetch Page'
|
|
)
|
|
|
|
await browser.elementByCss('#static-prefetch').click()
|
|
|
|
expect(await browser.elementByCss('#static-prefetch-page').text()).toBe(
|
|
'Hello from Static Prefetch Page'
|
|
)
|
|
})
|
|
}
|
|
)
|