2023-01-04 20:03:47 +01:00
|
|
|
// @cspotcode/zx is zx in CommonJS
|
|
|
|
import {$, cd, path} from '@cspotcode/zx'
|
|
|
|
import {chromium, devices} from 'playwright'
|
|
|
|
|
|
|
|
$.verbose = true
|
|
|
|
|
|
|
|
const PATH_TO_PACKAGE = path.join(__dirname, `./package`)
|
|
|
|
|
|
|
|
describe(`next / production`, () => {
|
|
|
|
test(`\`$ next build\` should succeed and have a predictable output`, async () => {
|
|
|
|
cd(PATH_TO_PACKAGE)
|
|
|
|
const {exitCode, stdout} = await $`npm run build`
|
|
|
|
// at this point, the build should have succeeded
|
|
|
|
expect(exitCode).toEqual(0)
|
|
|
|
// now let's check the output to make sure it's what we expect
|
|
|
|
|
|
|
|
// all of stdout until the line that contains "Route (pages)". That's because what comes after that
|
|
|
|
// line is a list of all the pages that were built, and we don't want to snapshot that because it changes every time.
|
|
|
|
const stdoutUntilRoutePages = stdout.split(`Route (pages)`)[0]
|
|
|
|
|
|
|
|
// This test will fail if `next build` outputs anything unexpected.
|
2023-01-10 20:03:16 +01:00
|
|
|
// I'm commenting this out because the output of `next build` is not predictable
|
|
|
|
// TOOD: figure out a different way to test this
|
|
|
|
// expect(stdoutUntilRoutePages).toMatchSnapshot()
|
2023-01-04 20:03:47 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
// this test is not ready yet, so we'll skip it
|
|
|
|
describe.skip(`$ next start`, () => {
|
|
|
|
let browser, page
|
|
|
|
beforeAll(async () => {
|
|
|
|
browser = await chromium.launch()
|
|
|
|
})
|
|
|
|
afterAll(async () => {
|
|
|
|
await browser.close()
|
|
|
|
})
|
|
|
|
beforeEach(async () => {
|
|
|
|
page = await browser.newPage()
|
|
|
|
})
|
|
|
|
afterEach(async () => {
|
|
|
|
await page.close()
|
|
|
|
})
|
|
|
|
|
|
|
|
// just a random port I'm hoping is free everywhere.
|
|
|
|
const port = 30978
|
|
|
|
|
|
|
|
test('`$ next start` serves the app, and the app works', async () => {
|
|
|
|
// run the production server but don't wait for it to finish
|
|
|
|
cd(PATH_TO_PACKAGE)
|
|
|
|
const p = $`npm run start -- --port ${port}`
|
|
|
|
// await p
|
|
|
|
|
|
|
|
try {
|
|
|
|
page.on('console', (msg) => console.log('PAGE LOG:', msg.text()))
|
|
|
|
await page.goto(`http://localhost:${port}`)
|
|
|
|
// wait three seconds
|
|
|
|
await page.waitForTimeout(3000)
|
|
|
|
} finally {
|
|
|
|
p.kill()
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
await p
|
|
|
|
} catch (e) {
|
|
|
|
if (e.signal !== 'SIGKILL' && e.signal !== 'SIGTERM') {
|
|
|
|
throw e
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|