next.js/test/e2e/cpu-profiling/cpu-profiling-build.test.ts
cpu-profiling-build.test.ts58 lines1.9 KB
import { nextTestSetup, isNextDeploy } from 'e2e-utils'
import { pathExists, readdir } from 'fs-extra'
import { join } from 'path'

describe('CPU Profiling - next build', () => {
  const { next, isNextDev, skipped, isTurbopack } = nextTestSetup({
    files: __dirname,
    buildCommand: 'pnpm next build --experimental-cpu-prof',
    dependencies: {},
    skipStart: true,
    skipDeployment: true,
  })

  // CPU profiling only works with local `next build`, not dev or deploy modes
  if (isNextDev || isNextDeploy || skipped) {
    it('skip for development/deploy mode', () => {})
    return
  }

  beforeAll(async () => {
    // Run the build with CPU profiling enabled
    await next.build()
  })

  it('should create CPU profile files after build', async () => {
    const profileDir = join(next.testDir, '.next-profiles')

    const profileDirExists = await pathExists(profileDir)
    expect(profileDirExists).toBe(true)

    const files = await readdir(profileDir)
    const cpuProfiles = files.filter((f: string) => f.endsWith('.cpuprofile'))

    // Main profile should always exist
    expect(cpuProfiles.some((f) => f.startsWith('build-main-'))).toBe(true)

    if (isTurbopack) {
      // Turbopack mode generates: build-main, build-turbopack
      expect(cpuProfiles.length).toBe(2)
      expect(cpuProfiles.some((f) => f.startsWith('build-turbopack-'))).toBe(
        true
      )
    } else {
      // Webpack mode generates: build-main, build-webpack-client, build-webpack-server, build-webpack-edge-server
      expect(cpuProfiles.length).toBe(4)
      expect(
        cpuProfiles.some((f) => f.startsWith('build-webpack-client-'))
      ).toBe(true)
      expect(
        cpuProfiles.some((f) => f.startsWith('build-webpack-server-'))
      ).toBe(true)
      expect(
        cpuProfiles.some((f) => f.startsWith('build-webpack-edge-server-'))
      ).toBe(true)
    }
  })
})
Quest for Codev2.0.0
/
SIGN IN