Ensure required-server-files
test can exit cleanly (#66765)
When running `pnpm test-start test/production/standalone-mode/required-server-files/required-server-files.test.ts` locally, Jest hangs and prevents the process from exiting. In the CI, the issue is masked because `run-tests.js` uses `--forceExit`. The reason for the hanging process is that there are two server instances started, and only the last one is killed. By starting and killing the server for each test we can not only fix this, but also prevent the `should run middleware correctly (without minimalMode, with wasm)` test from affecting the other tests when flipping the `minimalMode` flag in `server.js`. I also reverted the darwin-specific overwrites of `appPort` that were added in #65722 and #66724. I don't think those are needed because after #65722 was created we did land #66285 which sets the hostname to be compatible with ipv4 and ipv6. If there's still a need to keep this then let me know, and I will restore it.
This commit is contained in:
parent
ba97c7595f
commit
7523f327e0
5 changed files with 45 additions and 81 deletions
|
@ -91,10 +91,6 @@ describe('required server files app router', () => {
|
|||
cwd: next.testDir,
|
||||
}
|
||||
)
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
appPort = `http://127.0.0.1:${appPort}`
|
||||
}
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
|
|
|
@ -128,10 +128,6 @@ describe('required server files i18n', () => {
|
|||
},
|
||||
}
|
||||
)
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
appPort = `http://127.0.0.1:${appPort}`
|
||||
}
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
|
|
|
@ -101,10 +101,6 @@ describe('required server files app router', () => {
|
|||
cwd: next.testDir,
|
||||
}
|
||||
)
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
appPort = `http://127.0.0.1:${appPort}`
|
||||
}
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
|
|
|
@ -24,14 +24,9 @@ describe('required server files', () => {
|
|||
let errors = []
|
||||
let stderr = ''
|
||||
let requiredFilesManifest
|
||||
let minimalMode = true
|
||||
|
||||
const setupNext = async ({
|
||||
nextEnv,
|
||||
minimalMode,
|
||||
}: {
|
||||
nextEnv?: boolean
|
||||
minimalMode?: boolean
|
||||
}) => {
|
||||
const setupNext = async ({ nextEnv }: { nextEnv?: boolean }) => {
|
||||
// test build against environment with next support
|
||||
process.env.NOW_BUILDER = nextEnv ? '1' : ''
|
||||
|
||||
|
@ -109,18 +104,31 @@ describe('required server files', () => {
|
|||
await fs.remove(join(next.testDir, '.next/server', file))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
await setupNext({ nextEnv: true })
|
||||
})
|
||||
|
||||
beforeEach(async () => {
|
||||
errors = []
|
||||
stderr = ''
|
||||
|
||||
const testServerFilename = join(next.testDir, 'standalone/server.js')
|
||||
const testServerContent = await fs.readFile(testServerFilename, 'utf8')
|
||||
|
||||
const testServer = join(next.testDir, 'standalone/server.js')
|
||||
await fs.writeFile(
|
||||
testServer,
|
||||
(await fs.readFile(testServer, 'utf8')).replace(
|
||||
'port:',
|
||||
`minimalMode: ${minimalMode},port:`
|
||||
testServerFilename,
|
||||
testServerContent.replace(
|
||||
/(startServer\({\s*)(minimalMode: (true|false),\n {2})?/,
|
||||
`$1minimalMode: ${minimalMode},\n `
|
||||
)
|
||||
)
|
||||
|
||||
appPort = await findPort()
|
||||
|
||||
server = await initNextServerScript(
|
||||
testServer,
|
||||
testServerFilename,
|
||||
/- Local:/,
|
||||
{
|
||||
...process.env,
|
||||
|
@ -136,24 +144,14 @@ describe('required server files', () => {
|
|||
},
|
||||
}
|
||||
)
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
appPort = `http://127.0.0.1:${appPort}`
|
||||
}
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
await setupNext({ nextEnv: true, minimalMode: true })
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
errors = []
|
||||
stderr = ''
|
||||
afterEach(async () => {
|
||||
await killApp(server)
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await next.destroy()
|
||||
if (server) await killApp(server)
|
||||
})
|
||||
|
||||
it('should resolve correctly when a redirect is returned', async () => {
|
||||
|
@ -1279,43 +1277,20 @@ describe('required server files', () => {
|
|||
expect(envVariables.envFromHost).toBe('FOOBAR')
|
||||
})
|
||||
|
||||
// FIXME: update to not mutate the global state
|
||||
it('should run middleware correctly (without minimalMode, with wasm)', async () => {
|
||||
describe('without minimalMode, with wasm', () => {
|
||||
beforeAll(() => {
|
||||
minimalMode = false
|
||||
})
|
||||
|
||||
it('should run middleware correctly', async () => {
|
||||
const standaloneDir = join(next.testDir, 'standalone')
|
||||
|
||||
const testServer = join(standaloneDir, 'server.js')
|
||||
await fs.writeFile(
|
||||
testServer,
|
||||
(await fs.readFile(testServer, 'utf8')).replace(
|
||||
'minimalMode: true',
|
||||
'minimalMode: false'
|
||||
)
|
||||
)
|
||||
appPort = await findPort()
|
||||
server = await initNextServerScript(
|
||||
testServer,
|
||||
/- Local:/,
|
||||
{
|
||||
...process.env,
|
||||
PORT: `${appPort}`,
|
||||
},
|
||||
undefined,
|
||||
{
|
||||
cwd: next.testDir,
|
||||
onStderr(msg) {
|
||||
errors.push(msg)
|
||||
stderr += msg
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
const res = await fetchViaHTTP(appPort, '/')
|
||||
expect(res.status).toBe(200)
|
||||
expect(await res.text()).toContain('index page')
|
||||
|
||||
expect(fs.existsSync(join(standaloneDir, '.next/server/edge-chunks'))).toBe(
|
||||
true
|
||||
)
|
||||
expect(
|
||||
fs.existsSync(join(standaloneDir, '.next/server/edge-chunks'))
|
||||
).toBe(true)
|
||||
|
||||
const resImageResponse = await fetchViaHTTP(
|
||||
appPort,
|
||||
|
@ -1325,6 +1300,7 @@ describe('required server files', () => {
|
|||
expect(resImageResponse.status).toBe(200)
|
||||
expect(resImageResponse.headers.get('content-type')).toBe('image/png')
|
||||
})
|
||||
})
|
||||
|
||||
it('should correctly handle a mismatch in buildIds when normalizing next data', async () => {
|
||||
const res = await fetchViaHTTP(
|
||||
|
|
|
@ -16054,11 +16054,11 @@
|
|||
"required server files should resolve correctly when a redirect is returned",
|
||||
"required server files should return data correctly with x-matched-path",
|
||||
"required server files should return data correctly with x-matched-path for optional catch-all route",
|
||||
"required server files should run middleware correctly (without minimalMode, with wasm)",
|
||||
"required server files should set correct SWR headers with notFound gsp",
|
||||
"required server files should set correct SWR headers with notFound gssp",
|
||||
"required server files should show invariant when an automatic static page is requested",
|
||||
"required server files should warn when \"next\" is imported directly"
|
||||
"required server files should warn when \"next\" is imported directly",
|
||||
"required server files without minimalMode, with wasm should run middleware correctly"
|
||||
],
|
||||
"pending": [],
|
||||
"flakey": [],
|
||||
|
|
Loading…
Reference in a new issue