-
Notifications
You must be signed in to change notification settings - Fork 27.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: split full reload HMR test into multiple files
- Loading branch information
1 parent
c123204
commit ccbf56f
Showing
4 changed files
with
282 additions
and
7 deletions.
There are no files selected for viewing
10 changes: 3 additions & 7 deletions
10
...__tests__/full-reload/full-reload.test.ts → ...load-no-base-path-no-asset-prefix.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
93 changes: 93 additions & 0 deletions
93
...lopment/basic/hmr/__tests__/full-reload/full-reload-no-base-path-yes-asset-prefix.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
import { join } from 'path' | ||
import { getRedboxHeader, retry } from 'next-test-utils' | ||
import { nextTestSetup } from 'e2e-utils' | ||
|
||
const nextConfig = { basePath: '', assetPrefix: '/asset-prefix' } | ||
|
||
describe(`HMR - Full Reload, nextConfig: ${JSON.stringify(nextConfig)}`, () => { | ||
const { next } = nextTestSetup({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
patchFileDelay: 500, | ||
}) | ||
const { basePath } = nextConfig | ||
|
||
it('should warn about full reload in cli output - anonymous page function', async () => { | ||
const start = next.cliOutput.length | ||
const browser = await next.browser( | ||
basePath + '/hmr/anonymous-page-function' | ||
) | ||
const cliWarning = | ||
'Fast Refresh had to perform a full reload when ./pages/hmr/anonymous-page-function.js changed. Read more: https://nextjs.org/docs/messages/fast-refresh-reload' | ||
|
||
expect(await browser.elementByCss('p').text()).toBe('hello world') | ||
expect(next.cliOutput.slice(start)).not.toContain(cliWarning) | ||
|
||
const currentFileContent = await next.readFile( | ||
'./pages/hmr/anonymous-page-function.js' | ||
) | ||
const newFileContent = currentFileContent.replace( | ||
'<p>hello world</p>', | ||
'<p id="updated">hello world!!!</p>' | ||
) | ||
await next.patchFile( | ||
'./pages/hmr/anonymous-page-function.js', | ||
newFileContent | ||
) | ||
|
||
expect(await browser.waitForElementByCss('#updated').text()).toBe( | ||
'hello world!!!' | ||
) | ||
|
||
// CLI warning | ||
expect(next.cliOutput.slice(start)).toContain(cliWarning) | ||
|
||
// Browser warning | ||
const browserLogs = await browser.log() | ||
expect( | ||
browserLogs.some(({ message }) => | ||
message.includes( | ||
"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree." | ||
) | ||
) | ||
).toBeTruthy() | ||
}) | ||
|
||
it('should warn about full reload in cli output - runtime-error', async () => { | ||
const start = next.cliOutput.length | ||
const browser = await next.browser(basePath + '/hmr/runtime-error') | ||
const cliWarning = | ||
'Fast Refresh had to perform a full reload due to a runtime error.' | ||
|
||
await retry(async () => { | ||
expect(await getRedboxHeader(browser)).toMatch( | ||
/ReferenceError: whoops is not defined/ | ||
) | ||
}) | ||
expect(next.cliOutput.slice(start)).not.toContain(cliWarning) | ||
|
||
const currentFileContent = await next.readFile( | ||
'./pages/hmr/runtime-error.js' | ||
) | ||
const newFileContent = currentFileContent.replace( | ||
'whoops', | ||
'<p id="updated">whoops</p>' | ||
) | ||
await next.patchFile('./pages/hmr/runtime-error.js', newFileContent) | ||
|
||
expect(await browser.waitForElementByCss('#updated').text()).toBe('whoops') | ||
|
||
// CLI warning | ||
expect(next.cliOutput.slice(start)).toContain(cliWarning) | ||
|
||
// Browser warning | ||
const browserLogs = await browser.log() | ||
expect( | ||
browserLogs.some(({ message }) => | ||
message.includes( | ||
'[Fast Refresh] performing full reload because your application had an unrecoverable error' | ||
) | ||
) | ||
).toBeTruthy() | ||
}) | ||
}) |
93 changes: 93 additions & 0 deletions
93
...lopment/basic/hmr/__tests__/full-reload/full-reload-yes-base-path-no-asset-prefix.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
import { join } from 'path' | ||
import { getRedboxHeader, retry } from 'next-test-utils' | ||
import { nextTestSetup } from 'e2e-utils' | ||
|
||
const nextConfig = { basePath: '/docs', assetPrefix: '' } | ||
|
||
describe(`HMR - Full Reload, nextConfig: ${JSON.stringify(nextConfig)}`, () => { | ||
const { next } = nextTestSetup({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
patchFileDelay: 500, | ||
}) | ||
const { basePath } = nextConfig | ||
|
||
it('should warn about full reload in cli output - anonymous page function', async () => { | ||
const start = next.cliOutput.length | ||
const browser = await next.browser( | ||
basePath + '/hmr/anonymous-page-function' | ||
) | ||
const cliWarning = | ||
'Fast Refresh had to perform a full reload when ./pages/hmr/anonymous-page-function.js changed. Read more: https://nextjs.org/docs/messages/fast-refresh-reload' | ||
|
||
expect(await browser.elementByCss('p').text()).toBe('hello world') | ||
expect(next.cliOutput.slice(start)).not.toContain(cliWarning) | ||
|
||
const currentFileContent = await next.readFile( | ||
'./pages/hmr/anonymous-page-function.js' | ||
) | ||
const newFileContent = currentFileContent.replace( | ||
'<p>hello world</p>', | ||
'<p id="updated">hello world!!!</p>' | ||
) | ||
await next.patchFile( | ||
'./pages/hmr/anonymous-page-function.js', | ||
newFileContent | ||
) | ||
|
||
expect(await browser.waitForElementByCss('#updated').text()).toBe( | ||
'hello world!!!' | ||
) | ||
|
||
// CLI warning | ||
expect(next.cliOutput.slice(start)).toContain(cliWarning) | ||
|
||
// Browser warning | ||
const browserLogs = await browser.log() | ||
expect( | ||
browserLogs.some(({ message }) => | ||
message.includes( | ||
"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree." | ||
) | ||
) | ||
).toBeTruthy() | ||
}) | ||
|
||
it('should warn about full reload in cli output - runtime-error', async () => { | ||
const start = next.cliOutput.length | ||
const browser = await next.browser(basePath + '/hmr/runtime-error') | ||
const cliWarning = | ||
'Fast Refresh had to perform a full reload due to a runtime error.' | ||
|
||
await retry(async () => { | ||
expect(await getRedboxHeader(browser)).toMatch( | ||
/ReferenceError: whoops is not defined/ | ||
) | ||
}) | ||
expect(next.cliOutput.slice(start)).not.toContain(cliWarning) | ||
|
||
const currentFileContent = await next.readFile( | ||
'./pages/hmr/runtime-error.js' | ||
) | ||
const newFileContent = currentFileContent.replace( | ||
'whoops', | ||
'<p id="updated">whoops</p>' | ||
) | ||
await next.patchFile('./pages/hmr/runtime-error.js', newFileContent) | ||
|
||
expect(await browser.waitForElementByCss('#updated').text()).toBe('whoops') | ||
|
||
// CLI warning | ||
expect(next.cliOutput.slice(start)).toContain(cliWarning) | ||
|
||
// Browser warning | ||
const browserLogs = await browser.log() | ||
expect( | ||
browserLogs.some(({ message }) => | ||
message.includes( | ||
'[Fast Refresh] performing full reload because your application had an unrecoverable error' | ||
) | ||
) | ||
).toBeTruthy() | ||
}) | ||
}) |
93 changes: 93 additions & 0 deletions
93
...opment/basic/hmr/__tests__/full-reload/full-reload-yes-base-path-yes-asset-prefix.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
import { join } from 'path' | ||
import { getRedboxHeader, retry } from 'next-test-utils' | ||
import { nextTestSetup } from 'e2e-utils' | ||
|
||
const nextConfig = { basePath: '/docs', assetPrefix: '/asset-prefix' } | ||
|
||
describe(`HMR - Full Reload, nextConfig: ${JSON.stringify(nextConfig)}`, () => { | ||
const { next } = nextTestSetup({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
patchFileDelay: 500, | ||
}) | ||
const { basePath } = nextConfig | ||
|
||
it('should warn about full reload in cli output - anonymous page function', async () => { | ||
const start = next.cliOutput.length | ||
const browser = await next.browser( | ||
basePath + '/hmr/anonymous-page-function' | ||
) | ||
const cliWarning = | ||
'Fast Refresh had to perform a full reload when ./pages/hmr/anonymous-page-function.js changed. Read more: https://nextjs.org/docs/messages/fast-refresh-reload' | ||
|
||
expect(await browser.elementByCss('p').text()).toBe('hello world') | ||
expect(next.cliOutput.slice(start)).not.toContain(cliWarning) | ||
|
||
const currentFileContent = await next.readFile( | ||
'./pages/hmr/anonymous-page-function.js' | ||
) | ||
const newFileContent = currentFileContent.replace( | ||
'<p>hello world</p>', | ||
'<p id="updated">hello world!!!</p>' | ||
) | ||
await next.patchFile( | ||
'./pages/hmr/anonymous-page-function.js', | ||
newFileContent | ||
) | ||
|
||
expect(await browser.waitForElementByCss('#updated').text()).toBe( | ||
'hello world!!!' | ||
) | ||
|
||
// CLI warning | ||
expect(next.cliOutput.slice(start)).toContain(cliWarning) | ||
|
||
// Browser warning | ||
const browserLogs = await browser.log() | ||
expect( | ||
browserLogs.some(({ message }) => | ||
message.includes( | ||
"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree." | ||
) | ||
) | ||
).toBeTruthy() | ||
}) | ||
|
||
it('should warn about full reload in cli output - runtime-error', async () => { | ||
const start = next.cliOutput.length | ||
const browser = await next.browser(basePath + '/hmr/runtime-error') | ||
const cliWarning = | ||
'Fast Refresh had to perform a full reload due to a runtime error.' | ||
|
||
await retry(async () => { | ||
expect(await getRedboxHeader(browser)).toMatch( | ||
/ReferenceError: whoops is not defined/ | ||
) | ||
}) | ||
expect(next.cliOutput.slice(start)).not.toContain(cliWarning) | ||
|
||
const currentFileContent = await next.readFile( | ||
'./pages/hmr/runtime-error.js' | ||
) | ||
const newFileContent = currentFileContent.replace( | ||
'whoops', | ||
'<p id="updated">whoops</p>' | ||
) | ||
await next.patchFile('./pages/hmr/runtime-error.js', newFileContent) | ||
|
||
expect(await browser.waitForElementByCss('#updated').text()).toBe('whoops') | ||
|
||
// CLI warning | ||
expect(next.cliOutput.slice(start)).toContain(cliWarning) | ||
|
||
// Browser warning | ||
const browserLogs = await browser.log() | ||
expect( | ||
browserLogs.some(({ message }) => | ||
message.includes( | ||
'[Fast Refresh] performing full reload because your application had an unrecoverable error' | ||
) | ||
) | ||
).toBeTruthy() | ||
}) | ||
}) |