-
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 basic HMR test into multiple files
- Loading branch information
1 parent
3c414b9
commit 5dc5ef0
Showing
4 changed files
with
339 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
113 changes: 113 additions & 0 deletions
113
test/development/basic/hmr/basic-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,113 @@ | ||
import { join } from 'path' | ||
import { | ||
assertHasRedbox, | ||
getBrowserBodyText, | ||
retry, | ||
waitFor, | ||
} from 'next-test-utils' | ||
import { createNext, nextTestSetup } from 'e2e-utils' | ||
|
||
const nextConfig = { basePath: '', assetPrefix: '/asset-prefix' } | ||
|
||
describe(`HMR - basic, nextConfig: ${JSON.stringify(nextConfig)}`, () => { | ||
const { next } = nextTestSetup({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
patchFileDelay: 500, | ||
}) | ||
const { basePath } = nextConfig | ||
|
||
it('should have correct router.isReady for auto-export page', async () => { | ||
let browser = await next.browser(basePath + '/auto-export-is-ready') | ||
|
||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({}) | ||
|
||
browser = await next.browser(basePath + '/auto-export-is-ready?hello=world') | ||
|
||
await retry(async () => { | ||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
}) | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({ | ||
hello: 'world', | ||
}) | ||
}) | ||
|
||
it('should have correct router.isReady for getStaticProps page', async () => { | ||
let browser = await next.browser(basePath + '/gsp-is-ready') | ||
|
||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({}) | ||
|
||
browser = await next.browser(basePath + '/gsp-is-ready?hello=world') | ||
|
||
await retry(async () => { | ||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
}) | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({ | ||
hello: 'world', | ||
}) | ||
}) | ||
|
||
it('should have correct compile timing after fixing error', async () => { | ||
const pageName = 'pages/auto-export-is-ready.js' | ||
const originalContent = await next.readFile(pageName) | ||
|
||
try { | ||
const browser = await next.browser(basePath + '/auto-export-is-ready') | ||
const outputLength = next.cliOutput.length | ||
await next.patchFile( | ||
pageName, | ||
`import hello from 'non-existent'\n` + originalContent | ||
) | ||
await assertHasRedbox(browser) | ||
await waitFor(3000) | ||
await next.patchFile(pageName, originalContent) | ||
await retry(async () => { | ||
expect(next.cliOutput.substring(outputLength)).toMatch(/Compiled.*?/i) | ||
}) | ||
const compileTimeStr = next.cliOutput.substring(outputLength) | ||
|
||
const matches = [ | ||
...compileTimeStr.match(/Compiled.*? in ([\d.]{1,})\s?(?:s|ms)/i), | ||
] | ||
const [, compileTime, timeUnit] = matches | ||
|
||
let compileTimeMs = parseFloat(compileTime) | ||
if (timeUnit === 's') { | ||
compileTimeMs = compileTimeMs * 1000 | ||
} | ||
expect(compileTimeMs).toBeLessThan(3000) | ||
} finally { | ||
await next.patchFile(pageName, originalContent) | ||
} | ||
}) | ||
|
||
it('should reload the page when the server restarts', async () => { | ||
const browser = await next.browser(basePath + '/hmr/about') | ||
await retry(async () => { | ||
expect(await getBrowserBodyText(browser)).toMatch( | ||
/This is the about page/ | ||
) | ||
}) | ||
|
||
await next.destroy() | ||
|
||
let reloadPromise = new Promise((resolve) => { | ||
browser.on('request', (req) => { | ||
if (req.url().endsWith('/hmr/about')) { | ||
resolve(req.url()) | ||
} | ||
}) | ||
}) | ||
|
||
const secondNext = await createNext({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
forcedPort: next.appPort, | ||
}) | ||
|
||
await reloadPromise | ||
await secondNext.destroy() | ||
}) | ||
}) |
113 changes: 113 additions & 0 deletions
113
test/development/basic/hmr/basic-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,113 @@ | ||
import { join } from 'path' | ||
import { | ||
assertHasRedbox, | ||
getBrowserBodyText, | ||
retry, | ||
waitFor, | ||
} from 'next-test-utils' | ||
import { createNext, nextTestSetup } from 'e2e-utils' | ||
|
||
const nextConfig = { basePath: '/docs', assetPrefix: '' } | ||
|
||
describe(`HMR - basic, nextConfig: ${JSON.stringify(nextConfig)}`, () => { | ||
const { next } = nextTestSetup({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
patchFileDelay: 500, | ||
}) | ||
const { basePath } = nextConfig | ||
|
||
it('should have correct router.isReady for auto-export page', async () => { | ||
let browser = await next.browser(basePath + '/auto-export-is-ready') | ||
|
||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({}) | ||
|
||
browser = await next.browser(basePath + '/auto-export-is-ready?hello=world') | ||
|
||
await retry(async () => { | ||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
}) | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({ | ||
hello: 'world', | ||
}) | ||
}) | ||
|
||
it('should have correct router.isReady for getStaticProps page', async () => { | ||
let browser = await next.browser(basePath + '/gsp-is-ready') | ||
|
||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({}) | ||
|
||
browser = await next.browser(basePath + '/gsp-is-ready?hello=world') | ||
|
||
await retry(async () => { | ||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
}) | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({ | ||
hello: 'world', | ||
}) | ||
}) | ||
|
||
it('should have correct compile timing after fixing error', async () => { | ||
const pageName = 'pages/auto-export-is-ready.js' | ||
const originalContent = await next.readFile(pageName) | ||
|
||
try { | ||
const browser = await next.browser(basePath + '/auto-export-is-ready') | ||
const outputLength = next.cliOutput.length | ||
await next.patchFile( | ||
pageName, | ||
`import hello from 'non-existent'\n` + originalContent | ||
) | ||
await assertHasRedbox(browser) | ||
await waitFor(3000) | ||
await next.patchFile(pageName, originalContent) | ||
await retry(async () => { | ||
expect(next.cliOutput.substring(outputLength)).toMatch(/Compiled.*?/i) | ||
}) | ||
const compileTimeStr = next.cliOutput.substring(outputLength) | ||
|
||
const matches = [ | ||
...compileTimeStr.match(/Compiled.*? in ([\d.]{1,})\s?(?:s|ms)/i), | ||
] | ||
const [, compileTime, timeUnit] = matches | ||
|
||
let compileTimeMs = parseFloat(compileTime) | ||
if (timeUnit === 's') { | ||
compileTimeMs = compileTimeMs * 1000 | ||
} | ||
expect(compileTimeMs).toBeLessThan(3000) | ||
} finally { | ||
await next.patchFile(pageName, originalContent) | ||
} | ||
}) | ||
|
||
it('should reload the page when the server restarts', async () => { | ||
const browser = await next.browser(basePath + '/hmr/about') | ||
await retry(async () => { | ||
expect(await getBrowserBodyText(browser)).toMatch( | ||
/This is the about page/ | ||
) | ||
}) | ||
|
||
await next.destroy() | ||
|
||
let reloadPromise = new Promise((resolve) => { | ||
browser.on('request', (req) => { | ||
if (req.url().endsWith('/hmr/about')) { | ||
resolve(req.url()) | ||
} | ||
}) | ||
}) | ||
|
||
const secondNext = await createNext({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
forcedPort: next.appPort, | ||
}) | ||
|
||
await reloadPromise | ||
await secondNext.destroy() | ||
}) | ||
}) |
113 changes: 113 additions & 0 deletions
113
test/development/basic/hmr/basic-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,113 @@ | ||
import { join } from 'path' | ||
import { | ||
assertHasRedbox, | ||
getBrowserBodyText, | ||
retry, | ||
waitFor, | ||
} from 'next-test-utils' | ||
import { createNext, nextTestSetup } from 'e2e-utils' | ||
|
||
const nextConfig = { basePath: '/docs', assetPrefix: '/asset-prefix' } | ||
|
||
describe(`HMR - basic, nextConfig: ${JSON.stringify(nextConfig)}`, () => { | ||
const { next } = nextTestSetup({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
patchFileDelay: 500, | ||
}) | ||
const { basePath } = nextConfig | ||
|
||
it('should have correct router.isReady for auto-export page', async () => { | ||
let browser = await next.browser(basePath + '/auto-export-is-ready') | ||
|
||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({}) | ||
|
||
browser = await next.browser(basePath + '/auto-export-is-ready?hello=world') | ||
|
||
await retry(async () => { | ||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
}) | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({ | ||
hello: 'world', | ||
}) | ||
}) | ||
|
||
it('should have correct router.isReady for getStaticProps page', async () => { | ||
let browser = await next.browser(basePath + '/gsp-is-ready') | ||
|
||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({}) | ||
|
||
browser = await next.browser(basePath + '/gsp-is-ready?hello=world') | ||
|
||
await retry(async () => { | ||
expect(await browser.elementByCss('#ready').text()).toBe('yes') | ||
}) | ||
expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({ | ||
hello: 'world', | ||
}) | ||
}) | ||
|
||
it('should have correct compile timing after fixing error', async () => { | ||
const pageName = 'pages/auto-export-is-ready.js' | ||
const originalContent = await next.readFile(pageName) | ||
|
||
try { | ||
const browser = await next.browser(basePath + '/auto-export-is-ready') | ||
const outputLength = next.cliOutput.length | ||
await next.patchFile( | ||
pageName, | ||
`import hello from 'non-existent'\n` + originalContent | ||
) | ||
await assertHasRedbox(browser) | ||
await waitFor(3000) | ||
await next.patchFile(pageName, originalContent) | ||
await retry(async () => { | ||
expect(next.cliOutput.substring(outputLength)).toMatch(/Compiled.*?/i) | ||
}) | ||
const compileTimeStr = next.cliOutput.substring(outputLength) | ||
|
||
const matches = [ | ||
...compileTimeStr.match(/Compiled.*? in ([\d.]{1,})\s?(?:s|ms)/i), | ||
] | ||
const [, compileTime, timeUnit] = matches | ||
|
||
let compileTimeMs = parseFloat(compileTime) | ||
if (timeUnit === 's') { | ||
compileTimeMs = compileTimeMs * 1000 | ||
} | ||
expect(compileTimeMs).toBeLessThan(3000) | ||
} finally { | ||
await next.patchFile(pageName, originalContent) | ||
} | ||
}) | ||
|
||
it('should reload the page when the server restarts', async () => { | ||
const browser = await next.browser(basePath + '/hmr/about') | ||
await retry(async () => { | ||
expect(await getBrowserBodyText(browser)).toMatch( | ||
/This is the about page/ | ||
) | ||
}) | ||
|
||
await next.destroy() | ||
|
||
let reloadPromise = new Promise((resolve) => { | ||
browser.on('request', (req) => { | ||
if (req.url().endsWith('/hmr/about')) { | ||
resolve(req.url()) | ||
} | ||
}) | ||
}) | ||
|
||
const secondNext = await createNext({ | ||
files: join(__dirname, '../../fixtures'), | ||
nextConfig, | ||
forcedPort: next.appPort, | ||
}) | ||
|
||
await reloadPromise | ||
await secondNext.destroy() | ||
}) | ||
}) |