-
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
2d611e3
commit 2d5c033
Showing
4 changed files
with
343 additions
and
8 deletions.
There are no files selected for viewing
12 changes: 4 additions & 8 deletions
12
...t/basic/hmr/__tests__/basic/basic.test.ts → ...asic-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
113 changes: 113 additions & 0 deletions
113
test/development/basic/hmr/__tests__/basic/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/__tests__/basic/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/__tests__/basic/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() | ||
}) | ||
}) |