mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
### What? - Added additional debug logging for `customRoutes`, `publicFolderItems`, and `nextStaticFolderItems` in the filesystem router utils - Improved the dynamic route interpolation test to check all script sources instead of just the first matching one - Fixed the Turbopack build test manifest to correctly mark the dynamic route interpolation test as passing - Updated the `to_string()` implementation in `ServerFileSystem` to use a hyphenated format so that it behaves the same between urlencoded and urldecoded. ### Why? This PR improves debugging capabilities for the filesystem router and fixes the dynamic route interpolation test to be more robust by checking all script sources rather than just the first one that matches certain criteria. The test now properly verifies that both encoded and decoded paths work correctly. ### How? - Added debug statements for additional route-related variables - Refactored the test to collect all script sources and verify each one works with both encoded and decoded paths - Updated the Turbopack test manifest to reflect the fixed test - Changed the server filesystem string representation to use hyphens instead of spaces
86 lines
2.8 KiB
TypeScript
86 lines
2.8 KiB
TypeScript
import { nextTestSetup } from 'e2e-utils'
|
|
|
|
describe('Dynamic Route Interpolation', () => {
|
|
const { next, isNextStart } = nextTestSetup({
|
|
files: __dirname,
|
|
})
|
|
|
|
it('should work', async () => {
|
|
const $ = await next.render$('/blog/a')
|
|
expect($('#slug').text()).toBe('a')
|
|
})
|
|
|
|
it('should work with parameter itself', async () => {
|
|
const $ = await next.render$('/blog/[slug]')
|
|
expect($('#slug').text()).toBe('[slug]')
|
|
})
|
|
|
|
it('should work with brackets', async () => {
|
|
const $ = await next.render$('/blog/[abc]')
|
|
expect($('#slug').text()).toBe('[abc]')
|
|
})
|
|
|
|
it('should work with parameter itself in API routes', async () => {
|
|
const text = await next.render('/api/dynamic/[slug]')
|
|
expect(text).toBe('slug: [slug]')
|
|
})
|
|
|
|
it('should work with brackets in API routes', async () => {
|
|
const text = await next.render('/api/dynamic/[abc]')
|
|
expect(text).toBe('slug: [abc]')
|
|
})
|
|
|
|
it('should bust data cache', async () => {
|
|
const browser = await next.browser('/blog/login')
|
|
await browser.elementById('now').click() // fetch data once
|
|
const text = await browser.elementById('now').text()
|
|
await browser.elementById('now').click() // fetch data again
|
|
await browser.waitForElementByCss(`#now:not(:text("${text}"))`)
|
|
await browser.close()
|
|
})
|
|
|
|
it('should bust data cache with symbol', async () => {
|
|
const browser = await next.browser('/blog/@login')
|
|
await browser.elementById('now').click() // fetch data once
|
|
const text = await browser.elementById('now').text()
|
|
await browser.elementById('now').click() // fetch data again
|
|
await browser.waitForElementByCss(`#now:not(:text("${text}"))`)
|
|
await browser.close()
|
|
})
|
|
|
|
if (isNextStart) {
|
|
it('should support both encoded and decoded nextjs reserved path convention characters in path', async () => {
|
|
const $ = await next.render$('/blog/123')
|
|
const scripts: string[] = []
|
|
for (const script of $('script').toArray()) {
|
|
if (script.attribs.src) {
|
|
scripts.push(script.attribs.src)
|
|
}
|
|
}
|
|
|
|
expect(scripts).not.toBeEmpty()
|
|
|
|
for (const encodedPath of scripts) {
|
|
// e.g. /_next/static/chunks/pages/blog/%5Bslug%5D-3d2fedc300f04305.js
|
|
const { status: encodedPathReqStatus } = await next.fetch(encodedPath)
|
|
|
|
// e.g. /_next/static/chunks/pages/blog/[slug]-3d2fedc300f04305.js
|
|
const decodedPath = decodeURI(encodedPath)
|
|
const { status: decodedPathReqStatus } = await next.fetch(decodedPath)
|
|
|
|
expect({
|
|
encodedPath,
|
|
encodedStatus: encodedPathReqStatus,
|
|
decodedPath,
|
|
decodedStatus: decodedPathReqStatus,
|
|
}).toMatchObject({
|
|
encodedPath,
|
|
decodedPath,
|
|
encodedStatus: 200,
|
|
decodedStatus: 200,
|
|
})
|
|
}
|
|
})
|
|
}
|
|
})
|