mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
With this PR, we're enabling deployment testing for the existing Segment Cache test suites (excluding those that need a custom server setup). Two timing issues were fixed, and one bug was uncovered. For details see the inline comments below.
71 lines
2.4 KiB
TypeScript
71 lines
2.4 KiB
TypeScript
import { nextTestSetup } from 'e2e-utils'
|
|
import { retry } from 'next-test-utils'
|
|
|
|
describe('segment cache (MPA navigations)', () => {
|
|
const { next, isNextDev } = nextTestSetup({
|
|
files: __dirname,
|
|
})
|
|
if (isNextDev) {
|
|
test('ppr is disabled', () => {})
|
|
return
|
|
}
|
|
|
|
type ElementWithExpando = Element & { __expando?: boolean }
|
|
|
|
it('triggers MPA navigation when navigating to a different root layout', async () => {
|
|
const browser = await next.browser('/')
|
|
|
|
// Set an expando on the html element so we can detect if the page
|
|
// gets unloaded.
|
|
const html = await browser.elementByCss('html')
|
|
|
|
await html.evaluate((el) => ((el as ElementWithExpando).__expando = true))
|
|
|
|
// Navigate to a page with a different root layout.
|
|
const link = await browser.elementByCss(`a[href="/foo"]`)
|
|
await link.click()
|
|
|
|
// The expando should not be present because we did a full-page navigation.
|
|
await retry(async () => {
|
|
const htmlAfterNav = await browser.elementByCss('html')
|
|
expect(
|
|
await htmlAfterNav.evaluate(
|
|
(el) => (el as ElementWithExpando).__expando
|
|
)
|
|
).toBe(undefined)
|
|
})
|
|
})
|
|
|
|
it(
|
|
'triggers MPA navigation when navigating to a different root layout, ' +
|
|
'during a navigation where a root param also changed',
|
|
async () => {
|
|
// Testing this scenario because a root param change alone does not
|
|
// trigger an MPA navigation, but if an inner segment changes before the
|
|
// root layout, then we should trigger an MPA navigation. This case is
|
|
// handled slightly differently in the implementation than the case where
|
|
// there's no root param change.
|
|
const browser = await next.browser('/foo')
|
|
|
|
// Set an expando on the html element so we can detect if the page
|
|
// gets unloaded.
|
|
const html = await browser.elementByCss('html')
|
|
await html.evaluate((el) => ((el as ElementWithExpando).__expando = true))
|
|
|
|
// Navigate to a page with a different root layout.
|
|
const link = await browser.elementByCss(`a[href="/bar/inner"]`)
|
|
await link.click()
|
|
|
|
// The expando should not be present because we did a full-page navigation.
|
|
await retry(async () => {
|
|
const htmlAfterNav = await browser.elementByCss('html')
|
|
expect(
|
|
await htmlAfterNav.evaluate(
|
|
(el) => (el as ElementWithExpando).__expando
|
|
)
|
|
).toBe(undefined)
|
|
})
|
|
}
|
|
)
|
|
})
|