Files
Zack TannerandGitHub dd5e3ad611 [ci]: move router-act to top level testing utils (#84653)
We're starting to use this pattern in more places, so this moves `router-act` into our top level testing utils.
2025-10-08 17:01:40 -07:00

65 lines
1.8 KiB
TypeScript

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<typeof createRouterAct>
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')
})
})