From e0aac6f46eef7d1ce7140a5c34be66a68703666f Mon Sep 17 00:00:00 2001 From: Delba de Oliveira <32464864+delbaoliveira@users.noreply.github.com> Date: Thu, 12 Jan 2023 14:24:27 +0000 Subject: [PATCH 1/4] [example] Add missing package in app dir i18n example (#44820) ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [x] Make sure the linting passes by running `pnpm build && pnpm lint` - [x] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md) --- examples/app-dir-i18n-routing/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/app-dir-i18n-routing/package.json b/examples/app-dir-i18n-routing/package.json index 5d75c1870e82a3..ddeb2031f7d55e 100644 --- a/examples/app-dir-i18n-routing/package.json +++ b/examples/app-dir-i18n-routing/package.json @@ -10,7 +10,8 @@ "negotiator": "0.6.3", "next": "latest", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "server-only": "0.0.1" }, "devDependencies": { "@types/negotiator": "0.6.1", From 223c974774a3cb307c634752b35a210abee9788d Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Thu, 12 Jan 2023 15:48:59 +0100 Subject: [PATCH 2/4] Fix router.refresh() resetting state and Suspense boundaries (#44775) Co-authored-by: JJ Kasper --- .../src/client/components/layout-router.tsx | 9 +---- .../next/src/client/components/reducer.ts | 9 +++++ packages/next/src/server/app-render.tsx | 2 - .../page-to-refresh/page.js | 38 +++++++++++++++++++ .../refresh/navigate-then-refresh-bug/page.js | 14 +++++++ test/e2e/app-dir/app/index.test.ts | 24 ++++++++++++ 6 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page-to-refresh/page.js create mode 100644 test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page.js diff --git a/packages/next/src/client/components/layout-router.tsx b/packages/next/src/client/components/layout-router.tsx index 69a7fb215eb490..2ef524f81a6fc4 100644 --- a/packages/next/src/client/components/layout-router.tsx +++ b/packages/next/src/client/components/layout-router.tsx @@ -157,7 +157,6 @@ export function InnerLayoutRouter({ // TODO-APP: implement `` when available. // isActive, path, - rootLayoutIncluded, }: { parallelRouterKey: string url: string @@ -167,7 +166,6 @@ export function InnerLayoutRouter({ tree: FlightRouterState isActive: boolean path: string - rootLayoutIncluded: boolean }) { const context = useContext(GlobalLayoutRouterContext) if (!context) { @@ -295,12 +293,10 @@ export function InnerLayoutRouter({ ) // Ensure root layout is not wrapped in a div as the root layout renders `` - return rootLayoutIncluded ? ( + return ( {subtree} - ) : ( - subtree ) } @@ -455,7 +451,6 @@ export default function OuterLayoutRouter({ template, notFound, notFoundStyles, - rootLayoutIncluded, }: { parallelRouterKey: string segmentPath: FlightSegmentPath @@ -469,7 +464,6 @@ export default function OuterLayoutRouter({ hasLoading: boolean notFound: React.ReactNode | undefined notFoundStyles: React.ReactNode | undefined - rootLayoutIncluded: boolean }) { const context = useContext(LayoutRouterContext) if (!context) { @@ -546,7 +540,6 @@ export default function OuterLayoutRouter({ segmentPath={segmentPath} path={preservedSegment} isActive={currentChildSegment === preservedSegment} - rootLayoutIncluded={rootLayoutIncluded} /> diff --git a/packages/next/src/client/components/reducer.ts b/packages/next/src/client/components/reducer.ts index 3f128c1ba83cfc..4d7a1411502c3f 100644 --- a/packages/next/src/client/components/reducer.ts +++ b/packages/next/src/client/components/reducer.ts @@ -834,9 +834,11 @@ function clientReducer( // Handles case where prefetch only returns the router tree patch without rendered components. if (subTreeData !== null) { if (flightDataPath.length === 3) { + cache.status = CacheStates.READY cache.subTreeData = subTreeData fillLazyItemsTillLeafWithHead(cache, state.cache, treePatch, head) } else { + cache.status = CacheStates.READY // Copy subTreeData for the root node of the cache. cache.subTreeData = state.cache.subTreeData // Create a copy of the existing cache with the subTreeData applied. @@ -855,6 +857,7 @@ function clientReducer( ) if (hardNavigate) { + cache.status = CacheStates.READY // Copy subTreeData for the root node of the cache. cache.subTreeData = state.cache.subTreeData @@ -915,6 +918,7 @@ function clientReducer( ) // Copy subTreeData for the root node of the cache. + cache.status = CacheStates.READY cache.subTreeData = state.cache.subTreeData // Copy existing cache nodes as far as possible and fill in `data` property with the started data fetch. @@ -1012,10 +1016,12 @@ function clientReducer( mutable.mpaNavigation = isNavigatingToNewRootLayout(state.tree, newTree) if (flightDataPath.length === 3) { + cache.status = CacheStates.READY cache.subTreeData = subTreeData fillLazyItemsTillLeafWithHead(cache, state.cache, treePatch, head) } else { // Copy subTreeData for the root node of the cache. + cache.status = CacheStates.READY cache.subTreeData = state.cache.subTreeData // Create a copy of the existing cache with the subTreeData applied. fillCacheWithNewSubTreeData(cache, state.cache, flightDataPath) @@ -1137,10 +1143,12 @@ function clientReducer( // Root refresh if (flightDataPath.length === 3) { + cache.status = CacheStates.READY cache.subTreeData = subTreeData fillLazyItemsTillLeafWithHead(cache, state.cache, treePatch, head) } else { // Copy subTreeData for the root node of the cache. + cache.status = CacheStates.READY cache.subTreeData = state.cache.subTreeData fillCacheWithNewSubTreeData(cache, state.cache, flightDataPath) } @@ -1288,6 +1296,7 @@ function clientReducer( mutable.mpaNavigation = isNavigatingToNewRootLayout(state.tree, newTree) // Set subTreeData for the root node of the cache. + cache.status = CacheStates.READY cache.subTreeData = subTreeData fillLazyItemsTillLeafWithHead(cache, state.cache, treePatch, head) diff --git a/packages/next/src/server/app-render.tsx b/packages/next/src/server/app-render.tsx index 75e3683cb85d37..3b7f113f90ea98 100644 --- a/packages/next/src/server/app-render.tsx +++ b/packages/next/src/server/app-render.tsx @@ -1342,7 +1342,6 @@ export async function renderToHTMLOrFlight( notFound={NotFound ? : undefined} notFoundStyles={notFoundStyles} childProp={childProp} - rootLayoutIncluded={rootLayoutIncludedAtThisLevelOrAbove} />, ] } @@ -1387,7 +1386,6 @@ export async function renderToHTMLOrFlight( notFound={NotFound ? : undefined} notFoundStyles={notFoundStyles} childProp={childProp} - rootLayoutIncluded={rootLayoutIncludedAtThisLevelOrAbove} />, ] } diff --git a/test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page-to-refresh/page.js b/test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page-to-refresh/page.js new file mode 100644 index 00000000000000..a8563166038c9d --- /dev/null +++ b/test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page-to-refresh/page.js @@ -0,0 +1,38 @@ +'use client' +import { useRouter } from 'next/navigation' +import { startTransition } from 'react' +import { useCallback } from 'react' +import { useState } from 'react' + +export default function Page() { + const [success, setSuccess] = useState(false) + const [finishedRefresh, setFinishedRefresh] = useState(false) + const router = useRouter() + + const handleClick = useCallback(() => { + setSuccess(true) + startTransition(() => { + router.refresh() + setFinishedRefresh(true) + }) + }, [router]) + + return ( + <> + +

+ The current page +

+ {finishedRefresh && ( +
Refreshed page successfully!
+ )} + + ) +} diff --git a/test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page.js b/test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page.js new file mode 100644 index 00000000000000..ca1e157fa43188 --- /dev/null +++ b/test/e2e/app-dir/app/app/navigation/refresh/navigate-then-refresh-bug/page.js @@ -0,0 +1,14 @@ +import Link from 'next/link' + +export default function Page() { + return ( + <> + + To route + + + ) +} diff --git a/test/e2e/app-dir/app/index.test.ts b/test/e2e/app-dir/app/index.test.ts index e010507781c2be..dc59d962f38a21 100644 --- a/test/e2e/app-dir/app/index.test.ts +++ b/test/e2e/app-dir/app/index.test.ts @@ -2285,6 +2285,30 @@ createNextDescribe( expect($('#category-id').text()).toBe('electronicsabc') } }) + it('should handle router.refresh without resetting state', async () => { + const browser = await next.browser( + '/navigation/refresh/navigate-then-refresh-bug' + ) + await browser + .elementByCss('#to-route') + // Navigate to the page + .click() + // Wait for new page to be loaded + .waitForElementByCss('#refresh-page') + // Click the refresh button to trigger a refresh + .click() + + // Wait for element that is shown when refreshed and verify text + expect(await browser.waitForElementByCss('#refreshed').text()).toBe( + 'Refreshed page successfully!' + ) + + expect( + await browser.eval( + `window.getComputedStyle(document.querySelector('h1')).backgroundColor` + ) + ).toBe('rgb(34, 139, 34)') + }) it('should handle as on next/link', async () => { const browser = await next.browser('/link-with-as') expect( From 2b7e32c3f15e50668e262f8f2040a586c4709ac3 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Thu, 12 Jan 2023 15:58:54 +0100 Subject: [PATCH 3/4] v13.1.2-canary.6 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++++++------- packages/react-dev-overlay/package.json | 2 +- packages/react-refresh-utils/package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- 17 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lerna.json b/lerna.json index ecb3eb7a42b387..912bd164863c6e 100644 --- a/lerna.json +++ b/lerna.json @@ -16,5 +16,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "13.1.2-canary.5" + "version": "13.1.2-canary.6" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index f2fdcfe18afc0c..8cb5848596b978 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index 5ea8bf61fb814a..b6b49da58ca1f2 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "description": "ESLint configuration used by NextJS.", "main": "index.js", "license": "MIT", @@ -9,7 +9,7 @@ "directory": "packages/eslint-config-next" }, "dependencies": { - "@next/eslint-plugin-next": "13.1.2-canary.5", + "@next/eslint-plugin-next": "13.1.2-canary.6", "@rushstack/eslint-patch": "^1.1.3", "@typescript-eslint/parser": "^5.42.0", "eslint-import-resolver-node": "^0.3.6", diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index 7c98aff7e9c173..8d75500620ab49 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "description": "ESLint plugin for NextJS.", "main": "dist/index.js", "license": "MIT", diff --git a/packages/font/package.json b/packages/font/package.json index be6cf424549049..6179ae808b00d6 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,6 +1,6 @@ { "name": "@next/font", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 78ff50431d2ae8..3844db32522160 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 5eabee89999704..26a24dbc3bb3ee 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "license": "MIT", "dependencies": { "chalk": "4.1.0", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index f739c5a4a4a11f..13e92a786790e1 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index b5ac3df9f2cc0e..6514234b93a527 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index f223c62ce2272b..d0f415148559c3 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 7aa0f91fa655d3..3552b6eb84b092 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index b9f365e7a0d743..a0c93cd0ba72bd 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 290f9c0c8e1dbe..3ef90b14e79d42 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "private": true, "scripts": { "build-native": "napi build --platform -p next-swc-napi --cargo-name next_swc_napi --features plugin,rustls-tls --js false native", diff --git a/packages/next/package.json b/packages/next/package.json index 7ad9f80748fe4c..61432866edf762 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -76,7 +76,7 @@ ] }, "dependencies": { - "@next/env": "13.1.2-canary.5", + "@next/env": "13.1.2-canary.6", "@swc/helpers": "0.4.14", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", @@ -126,11 +126,11 @@ "@hapi/accept": "5.0.2", "@napi-rs/cli": "2.13.3", "@napi-rs/triples": "1.1.0", - "@next/polyfill-module": "13.1.2-canary.5", - "@next/polyfill-nomodule": "13.1.2-canary.5", - "@next/react-dev-overlay": "13.1.2-canary.5", - "@next/react-refresh-utils": "13.1.2-canary.5", - "@next/swc": "13.1.2-canary.5", + "@next/polyfill-module": "13.1.2-canary.6", + "@next/polyfill-nomodule": "13.1.2-canary.6", + "@next/react-dev-overlay": "13.1.2-canary.6", + "@next/react-refresh-utils": "13.1.2-canary.6", + "@next/swc": "13.1.2-canary.6", "@segment/ajv-human-errors": "2.1.2", "@taskr/clear": "1.1.0", "@taskr/esnext": "1.1.0", diff --git a/packages/react-dev-overlay/package.json b/packages/react-dev-overlay/package.json index eb1e18745d663f..929c3a052f6991 100644 --- a/packages/react-dev-overlay/package.json +++ b/packages/react-dev-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-dev-overlay", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "description": "A development-only overlay for developing React applications.", "repository": { "url": "vercel/next.js", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index a35da349df2070..f0e153290793a8 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "13.1.2-canary.5", + "version": "13.1.2-canary.6", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c655e0b523eab..ba773c9c6f19ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -434,7 +434,7 @@ importers: packages/eslint-config-next: specifiers: - '@next/eslint-plugin-next': 13.1.2-canary.5 + '@next/eslint-plugin-next': 13.1.2-canary.6 '@rushstack/eslint-patch': ^1.1.3 '@typescript-eslint/parser': ^5.42.0 eslint: ^7.23.0 || ^8.0.0 @@ -506,12 +506,12 @@ importers: '@hapi/accept': 5.0.2 '@napi-rs/cli': 2.13.3 '@napi-rs/triples': 1.1.0 - '@next/env': 13.1.2-canary.5 - '@next/polyfill-module': 13.1.2-canary.5 - '@next/polyfill-nomodule': 13.1.2-canary.5 - '@next/react-dev-overlay': 13.1.2-canary.5 - '@next/react-refresh-utils': 13.1.2-canary.5 - '@next/swc': 13.1.2-canary.5 + '@next/env': 13.1.2-canary.6 + '@next/polyfill-module': 13.1.2-canary.6 + '@next/polyfill-nomodule': 13.1.2-canary.6 + '@next/react-dev-overlay': 13.1.2-canary.6 + '@next/react-refresh-utils': 13.1.2-canary.6 + '@next/swc': 13.1.2-canary.6 '@segment/ajv-human-errors': 2.1.2 '@swc/helpers': 0.4.14 '@taskr/clear': 1.1.0 From 0b36a526c7e232610bc64ad76a21d097a77b01dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20Born=C3=B6?= Date: Thu, 12 Jan 2023 17:15:28 +0100 Subject: [PATCH 4/4] Fix capitalization in formatted server errors (#44798) --- packages/next/src/lib/format-server-error.ts | 2 +- .../acceptance-app/server-components.test.ts | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/next/src/lib/format-server-error.ts b/packages/next/src/lib/format-server-error.ts index c89d7bcd3e70d5..3b6765baf256ea 100644 --- a/packages/next/src/lib/format-server-error.ts +++ b/packages/next/src/lib/format-server-error.ts @@ -30,7 +30,7 @@ export function formatServerError(error: Error): void { error, `${error.message} -This might be caused by a React Class component being rendered in a server component, React Class components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component` +This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component` ) return } diff --git a/test/development/acceptance-app/server-components.test.ts b/test/development/acceptance-app/server-components.test.ts index b99b0ed1342632..ef71837e652716 100644 --- a/test/development/acceptance-app/server-components.test.ts +++ b/test/development/acceptance-app/server-components.test.ts @@ -331,13 +331,13 @@ createNextDescribe( .waitForElementByCss('#nextjs__container_errors_desc') .text() ).toContain( - 'This might be caused by a React Class component being rendered in a server component' + 'This might be caused by a React Class Component being rendered in a Server Component' ) return 'success' }, 'success') expect(next.cliOutput).toContain( - 'This might be caused by a React Class component being rendered in a server component' + 'This might be caused by a React Class Component being rendered in a Server Component' ) await cleanup() @@ -384,13 +384,13 @@ createNextDescribe( .waitForElementByCss('#nextjs__container_errors_desc') .text() ).toContain( - 'This might be caused by a React Class component being rendered in a server component' + 'This might be caused by a React Class Component being rendered in a Server Component' ) return 'success' }, 'success') expect(next.cliOutput).toContain( - 'This might be caused by a React Class component being rendered in a server component' + 'This might be caused by a React Class Component being rendered in a Server Component' ) await cleanup() @@ -437,13 +437,13 @@ createNextDescribe( .waitForElementByCss('#nextjs__container_errors_desc') .text() ).toContain( - 'This might be caused by a React Class component being rendered in a server component' + 'This might be caused by a React Class Component being rendered in a Server Component' ) return 'success' }, 'success') expect(next.cliOutput).toContain( - 'This might be caused by a React Class component being rendered in a server component' + 'This might be caused by a React Class Component being rendered in a Server Component' ) await cleanup()