From 1cd37793a4cff5f8b4b46406488e67e6e440d006 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Sat, 9 Jul 2022 16:58:16 +0200 Subject: [PATCH] Fix app dir page detection (#38475) ## Bug - [ ] Related issues linked using `fixes #number` - [x] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` --- packages/next/server/app-render.tsx | 3 +-- test/e2e/app-dir/rsc-basic.test.ts | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index ba1a48cd0409..a7843dd646d2 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -479,8 +479,7 @@ export async function renderToHTML( }): { Component: React.ComponentType } => { const Loading = loading ? interopDefault(loading()) : undefined const layoutOrPageMod = layout ? layout() : page ? page() : undefined - // TODO: improve detection - const isPage = !firstItem && segment === '' + const isPage = typeof page !== undefined const isClientComponentModule = layoutOrPageMod && !layoutOrPageMod.hasOwnProperty('__next_rsc__') diff --git a/test/e2e/app-dir/rsc-basic.test.ts b/test/e2e/app-dir/rsc-basic.test.ts index a2d605a0f4dc..c9b7564c9e36 100644 --- a/test/e2e/app-dir/rsc-basic.test.ts +++ b/test/e2e/app-dir/rsc-basic.test.ts @@ -155,10 +155,10 @@ describe('app dir - react server components', () => { await browser.waitForElementByCss('#goto-next-link').click() await new Promise((res) => setTimeout(res, 1000)) - expect(await browser.url()).toBe(`${next.url}/next-api/link`) + await check(() => browser.url(), `${next.url}/next-api/link`) await browser.waitForElementByCss('#goto-home').click() await new Promise((res) => setTimeout(res, 1000)) - expect(await browser.url()).toBe(`${next.url}/root`) + await check(() => browser.url(), `${next.url}/root`) const content = await browser.elementByCss('body').text() expect(content).toContain('component:root.server') @@ -180,7 +180,7 @@ describe('app dir - react server components', () => { expect(content).toMatchInlineSnapshot('"next_streaming_data"') }) - it.skip('should support next/link in server components', async () => { + it('should support next/link in server components', async () => { const linkHTML = await renderViaHTTP(next.url, '/next-api/link') const linkText = getNodeBySelector( linkHTML,