From 8f1ff8080a5e458f8d5b03dc5ce3826165201005 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Fri, 12 Jul 2024 10:45:33 +0200 Subject: [PATCH 1/3] Replace `check` with `retry` --- test/development/app-hmr/hmr.test.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/test/development/app-hmr/hmr.test.ts b/test/development/app-hmr/hmr.test.ts index 18cc88166dd05..d5c5b977d4b51 100644 --- a/test/development/app-hmr/hmr.test.ts +++ b/test/development/app-hmr/hmr.test.ts @@ -1,5 +1,5 @@ import { nextTestSetup } from 'e2e-utils' -import { check, waitFor } from 'next-test-utils' +import { retry, waitFor } from 'next-test-utils' const envFile = '.env.development.local' @@ -40,11 +40,10 @@ describe(`app-dir-hmr`, () => { try { // Should be 404 in a few seconds - await check(async () => { + await retry(async () => { const body = await browser.elementByCss('body').text() expect(body).toContain('404') - return 'success' - }, 'success') + }) // The new page should be rendered const newHTML = await next.render('/folder-renamed') @@ -62,10 +61,9 @@ describe(`app-dir-hmr`, () => { await next.patchFile(envFile, 'MY_DEVICE="ipad"') try { - await check(async () => { + await retry(async () => { expect(await browser.elementByCss('p').text()).toBe('ipad') - return 'success' - }, /success/) + }) } finally { await next.patchFile(envFile, envContent) } @@ -78,10 +76,9 @@ describe(`app-dir-hmr`, () => { await next.patchFile(envFile, 'MY_DEVICE="ipad"') try { - await check(async () => { + await retry(async () => { expect(await browser.elementByCss('p').text()).toBe('ipad') - return 'success' - }, /success/) + }) } finally { await next.patchFile(envFile, envContent) } From 0661bb24d58b4086a8311327b9cdfd34e1423a6b Mon Sep 17 00:00:00 2001 From: eps1lon Date: Fri, 12 Jul 2024 13:23:26 +0200 Subject: [PATCH 2/3] Current behavior for "[Fast Refresh]" logs when a Server Component changes --- test/development/app-hmr/hmr.test.ts | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/development/app-hmr/hmr.test.ts b/test/development/app-hmr/hmr.test.ts index d5c5b977d4b51..76232a3b690ab 100644 --- a/test/development/app-hmr/hmr.test.ts +++ b/test/development/app-hmr/hmr.test.ts @@ -60,10 +60,32 @@ describe(`app-dir-hmr`, () => { expect(await browser.elementByCss('p').text()).toBe('mac') await next.patchFile(envFile, 'MY_DEVICE="ipad"') + const logs = await browser.log() + await retry(async () => { + expect(logs).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + message: '[Fast Refresh] rebuilding', + source: 'log', + }), + ]) + ) + }) + try { await retry(async () => { expect(await browser.elementByCss('p').text()).toBe('ipad') }) + + // FIXME: Should have a message to close off the prior "rebuilding" + expect(logs).not.toEqual( + expect.arrayContaining([ + expect.objectContaining({ + message: expect.stringContaining('[Fast Refresh] done in'), + source: 'log', + }), + ]) + ) } finally { await next.patchFile(envFile, envContent) } @@ -75,10 +97,32 @@ describe(`app-dir-hmr`, () => { expect(await browser.elementByCss('p').text()).toBe('mac') await next.patchFile(envFile, 'MY_DEVICE="ipad"') + const logs = await browser.log() + await retry(async () => { + expect(logs).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + message: '[Fast Refresh] rebuilding', + source: 'log', + }), + ]) + ) + }) + try { await retry(async () => { expect(await browser.elementByCss('p').text()).toBe('ipad') }) + + // FIXME: Should have a message to close off the prior "rebuilding" + expect(logs).not.toEqual( + expect.arrayContaining([ + expect.objectContaining({ + message: expect.stringContaining('[Fast Refresh] done in'), + source: 'log', + }), + ]) + ) } finally { await next.patchFile(envFile, envContent) } From d7457d21f47c1890a1cd7f7f62580d3ff73f9949 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Fri, 12 Jul 2024 13:30:44 +0200 Subject: [PATCH 3/3] Report HMR latency when a Server Component changes --- .../react-dev-overlay/app/hot-reloader-client.tsx | 1 + test/development/app-hmr/hmr.test.ts | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/next/src/client/components/react-dev-overlay/app/hot-reloader-client.tsx b/packages/next/src/client/components/react-dev-overlay/app/hot-reloader-client.tsx index 76361aedd5da8..39be81f513406 100644 --- a/packages/next/src/client/components/react-dev-overlay/app/hot-reloader-client.tsx +++ b/packages/next/src/client/components/react-dev-overlay/app/hot-reloader-client.tsx @@ -430,6 +430,7 @@ function processMessage( router.fastRefresh() dispatcher.onRefresh() }) + reportHmrLatency(sendMessage, []) if (process.env.__NEXT_TEST_MODE) { if (self.__NEXT_HMR_CB) { diff --git a/test/development/app-hmr/hmr.test.ts b/test/development/app-hmr/hmr.test.ts index 76232a3b690ab..46a5311cf06b1 100644 --- a/test/development/app-hmr/hmr.test.ts +++ b/test/development/app-hmr/hmr.test.ts @@ -77,8 +77,7 @@ describe(`app-dir-hmr`, () => { expect(await browser.elementByCss('p').text()).toBe('ipad') }) - // FIXME: Should have a message to close off the prior "rebuilding" - expect(logs).not.toEqual( + expect(logs).toEqual( expect.arrayContaining([ expect.objectContaining({ message: expect.stringContaining('[Fast Refresh] done in'), @@ -114,8 +113,7 @@ describe(`app-dir-hmr`, () => { expect(await browser.elementByCss('p').text()).toBe('ipad') }) - // FIXME: Should have a message to close off the prior "rebuilding" - expect(logs).not.toEqual( + expect(logs).toEqual( expect.arrayContaining([ expect.objectContaining({ message: expect.stringContaining('[Fast Refresh] done in'),