Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
216 lines
6.8 KiB
TypeScript
216 lines
6.8 KiB
TypeScript
import { nextTestSetup } from 'e2e-utils'
|
||
import {
|
||
waitForRedbox,
|
||
waitForNoRedbox,
|
||
getRedboxDescription,
|
||
getRedboxSource,
|
||
retry,
|
||
} from 'next-test-utils'
|
||
import stripAnsi from 'strip-ansi'
|
||
import { createSandbox } from 'development-sandbox'
|
||
|
||
describe('use-cache-unknown-cache-kind', () => {
|
||
const { next, isNextStart, isTurbopack, isRspack, skipped } = nextTestSetup({
|
||
files: __dirname,
|
||
skipStart: process.env.NEXT_TEST_MODE !== 'dev',
|
||
skipDeployment: true,
|
||
})
|
||
|
||
if (skipped) {
|
||
return
|
||
}
|
||
|
||
if (isNextStart) {
|
||
beforeAll(async () => {
|
||
await next.build()
|
||
})
|
||
|
||
it('should fail the build with an error', async () => {
|
||
const buildOutput = getBuildOutput(next.cliOutput)
|
||
|
||
if (isTurbopack) {
|
||
expect(buildOutput).toMatchInlineSnapshot(`
|
||
"Error: Turbopack build failed with 1 errors:
|
||
./app/page.tsx:1:1
|
||
Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config.
|
||
> 1 | 'use cache: custom'
|
||
| ^^^^^^^^^^^^^^^^^^^
|
||
2 |
|
||
3 | export default async function Page() {
|
||
4 | return <p>hello world</p>
|
||
|
||
Ecmascript file had an error
|
||
|
||
|
||
at <unknown> (./app/page.tsx:1:1)
|
||
"
|
||
`)
|
||
} else if (isRspack) {
|
||
expect(buildOutput).toMatchInlineSnapshot(`
|
||
"
|
||
./app/page.tsx
|
||
╰─▶ × Error: x Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config.
|
||
│
|
||
│ ,-[1:1]
|
||
│ 1 | 'use cache: custom'
|
||
│ : ^^^^^^^^^^^^^^^^^^^
|
||
│ 2 |
|
||
│ 3 | export default async function Page() {
|
||
│ 4 | return <p>hello world</p>
|
||
│ \`----
|
||
│
|
||
|
||
Import trace for requested module:
|
||
./app/page.tsx
|
||
|
||
|
||
> Build failed because of Rspack errors
|
||
"
|
||
`)
|
||
} else {
|
||
expect(buildOutput).toMatchInlineSnapshot(`
|
||
"
|
||
./app/page.tsx
|
||
Error: x Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config.
|
||
|
||
,-[1:1]
|
||
1 | 'use cache: custom'
|
||
: ^^^^^^^^^^^^^^^^^^^
|
||
2 |
|
||
3 | export default async function Page() {
|
||
4 | return <p>hello world</p>
|
||
\`----
|
||
|
||
Import trace for requested module:
|
||
./app/page.tsx
|
||
|
||
|
||
> Build failed because of webpack errors
|
||
"
|
||
`)
|
||
}
|
||
})
|
||
|
||
it('should not fail the build for default cache kinds', async () => {
|
||
expect(next.cliOutput).not.toInclude('Unknown cache kind "remote"')
|
||
})
|
||
} else {
|
||
it('should not show an error for default cache kinds', async () => {
|
||
await using sandbox = await createSandbox(next, undefined, '/remote')
|
||
const { browser } = sandbox
|
||
await waitForNoRedbox(browser)
|
||
})
|
||
|
||
it('should show a build error', async () => {
|
||
await using sandbox = await createSandbox(next, undefined, '/')
|
||
const { browser } = sandbox
|
||
|
||
await waitForRedbox(browser)
|
||
|
||
const errorDescription = await getRedboxDescription(browser)
|
||
const errorSource = await getRedboxSource(browser)
|
||
|
||
if (isTurbopack) {
|
||
expect(errorDescription).toMatchInlineSnapshot(
|
||
`"Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config."`
|
||
)
|
||
} else if (isRspack) {
|
||
expect(errorDescription).toMatchInlineSnapshot(
|
||
`" ╰─▶ × Error: x Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config."`
|
||
)
|
||
} else {
|
||
expect(errorDescription).toMatchInlineSnapshot(
|
||
`" x Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config."`
|
||
)
|
||
}
|
||
|
||
if (isTurbopack) {
|
||
expect(errorSource).toMatchInlineSnapshot(`
|
||
"./app/page.tsx (1:1)
|
||
Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config.
|
||
> 1 | 'use cache: custom'
|
||
| ^^^^^^^^^^^^^^^^^^^
|
||
2 |
|
||
3 | export default async function Page() {
|
||
4 | return <p>hello world</p>
|
||
|
||
Ecmascript file had an error"
|
||
`)
|
||
} else if (isRspack) {
|
||
expect(errorSource).toMatchInlineSnapshot(`
|
||
"./app/page.tsx
|
||
╰─▶ × Error: x Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config.
|
||
│
|
||
│ ,-[1:1]
|
||
│ 1 | 'use cache: custom'
|
||
│ : ^^^^^^^^^^^^^^^^^^^
|
||
│ 2 |
|
||
│ 3 | export default async function Page() {
|
||
│ 4 | return <p>hello world</p>
|
||
│ \`----
|
||
│"
|
||
`)
|
||
} else {
|
||
expect(errorSource).toMatchInlineSnapshot(`
|
||
"./app/page.tsx
|
||
Error: x Unknown cache kind "custom". Please configure a cache handler for this kind in the \`cacheHandlers\` object in your Next.js config.
|
||
|
||
,-[1:1]
|
||
1 | 'use cache: custom'
|
||
: ^^^^^^^^^^^^^^^^^^^
|
||
2 |
|
||
3 | export default async function Page() {
|
||
4 | return <p>hello world</p>
|
||
\`----"
|
||
`)
|
||
}
|
||
})
|
||
|
||
it('should recover from the build error if the cache handler is defined', async () => {
|
||
await using sandbox = await createSandbox(next, undefined, '/')
|
||
const { browser, session } = sandbox
|
||
|
||
await waitForRedbox(browser)
|
||
|
||
await session.patch(
|
||
'next.config.js',
|
||
`module.exports = {
|
||
cacheComponents: true,
|
||
cacheHandlers: {
|
||
custom: require.resolve(
|
||
'next/dist/server/lib/cache-handlers/default.external'
|
||
),
|
||
},
|
||
}`
|
||
)
|
||
|
||
await retry(async () => {
|
||
expect(await browser.elementByCss('p').text()).toBe('hello world')
|
||
await waitForNoRedbox(browser)
|
||
})
|
||
})
|
||
}
|
||
})
|
||
|
||
function getBuildOutput(cliOutput: string): string {
|
||
const lines: string[] = []
|
||
let skipLines = true
|
||
|
||
for (const line of cliOutput.split('\n')) {
|
||
if (!skipLines) {
|
||
if (line.includes('at turbopackBuild')) {
|
||
break
|
||
}
|
||
|
||
lines.push(stripAnsi(line))
|
||
} else if (
|
||
line.includes('Build error occurred') ||
|
||
line.includes('Failed to compile')
|
||
) {
|
||
skipLines = false
|
||
}
|
||
}
|
||
|
||
return lines.join('\n')
|
||
}
|