import { nextTestSetup } from 'e2e-utils' import type * as Playwright from 'playwright' import { createRouterAct } from 'router-act' describe('dynamic on hover', () => { const { next, isNextDev } = nextTestSetup({ files: __dirname, }) if (isNextDev) { test('prefetching is disabled', () => {}) return } it('prefetches the dynamic data for a Link on hover', async () => { let act: ReturnType const browser = await next.browser('/', { beforePageLoad(p: Playwright.Page) { act = createRouterAct(p) }, }) // This Link's unstable_dynamicOnHover prop is set to true const linkVisibilityToggle = await browser.elementByCss( 'input[data-link-accordion="/dynamic"]' ) // Reveal the link to start prefetching. Since the link has not been hovered // yet, the prefetch only includes static data. await act(async () => { await linkVisibilityToggle.click() await browser.elementByCss('a[href="/dynamic"]') }, [ { includes: 'Static content in layout of dynamic page', }, { includes: 'Loading dynamic data...', }, ]) // Hover over the link to prefetch the dynamic data const link = await browser.elementByCss('a[href="/dynamic"]') await act(async () => { await link.hover() }, [ // The dynamic data was prefetched { includes: 'Dynamic content', }, // The static content in the layout was not fetched again, because it // was already cached. { includes: 'Static content in layout of dynamic page', block: 'reject', }, ]) // When navigating to the page, no additional requests are issued, because // the entire page was prefetched. await act(async () => { await link.click() }, 'no-requests') }) })