Skip to content

Commit 1ba77c6

Browse files
committed
clean up logs and fix tests
1 parent baf722d commit 1ba77c6

File tree

5 files changed

+52
-57
lines changed

5 files changed

+52
-57
lines changed

packages/next/shared/lib/dynamic.tsx

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,10 @@ export default function dynamic<P = {}>(
130130
}
131131

132132
const { suspense, ssr, loader, loadableGenerated } = loadableOptions
133-
// client side rendering
134-
const csr = ssr === false
135133
delete loadableOptions.ssr
136134
delete loadableOptions.loadableGenerated
137135

138136
if (typeof loadableOptions.loader === 'function' && suspense) {
139-
// If `suspense = true` and `ssr = false`:
140-
// render empty on server side;
141-
// render lazy component on client side.
142-
if (csr && isServerSide) {
143-
return () => null
144-
}
145137
loadableOptions.loader = React.lazy(
146138
loader as () => Promise<{
147139
default: React.ComponentType<P>
@@ -158,7 +150,7 @@ export default function dynamic<P = {}>(
158150
}
159151

160152
// support for disabling server side rendering, eg: dynamic(import('../hello-world'), {ssr: false})
161-
if (csr && !suspense) {
153+
if (ssr === false && !suspense) {
162154
return noSSR(loadableFn, loadableOptions)
163155
}
164156

test/integration/react-18/prerelease/components/dynamic-suspense.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { Suspense } from 'react'
22
import dynamic from 'next/dynamic'
33

44
const Hello = dynamic(() => import('./hello'), {
5-
ssr: false,
6-
suspense: false,
5+
ssr: true,
6+
suspense: true,
77
})
88

99
export default function SuspenseNoSSR({ thrown }) {

test/integration/react-18/prerelease/components/hello.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import ReactDOM from 'react-dom'
44
export default function Hello({ thrown = false }) {
55
// only throw on server side render
66
if (thrown && typeof window === 'undefined') {
7-
throw new Promise((resolve) => setTimeout(resolve, 500))
7+
throw new Promise((resolve) => setTimeout(resolve, 300))
88
}
99
return <p>hello {ReactDOM.version}</p>
1010
}

test/integration/react-18/test/dynamic.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ export default (context, render) => {
3535

3636
describe('suspense:true option', () => {
3737
describe('promise is thrown on server side', () => {
38-
beforeAll(() => {
39-
writeComponent({ suspense: true })
40-
})
38+
// let `ssr` option be auto overridden
39+
beforeAll(() => writeComponent({ suspense: true }))
40+
afterAll(() => page.restore())
4141

4242
it('should render the fallback on server side', async () => {
4343
const $ = await get$('/suspense/thrown')
@@ -62,6 +62,7 @@ export default (context, render) => {
6262
})
6363

6464
describe('promise is not thrown on server side', () => {
65+
afterAll(() => page.restore())
6566
it('should render fallback on server side', async () => {
6667
const $ = await get$('/suspense/no-thrown')
6768
const text = $('#__next').text()
@@ -83,18 +84,17 @@ export default (context, render) => {
8384
})
8485

8586
describe('suspense:false option', () => {
86-
it('should render the fallback on server side', async () => {
87-
writeComponent({ suspense: false, ssr: false })
87+
beforeAll(() => writeComponent({ suspense: false, ssr: false }))
88+
afterAll(() => page.restore())
89+
90+
it('should render nothing on server side', async () => {
8891
const $ = await get$('/suspense/thrown')
89-
const html = $('body').html()
90-
expect(html).toContain('loading')
91-
expect(JSON.parse($('#__NEXT_DATA__').html()).dynamicIds).toContain(
92-
'./components/hello.js'
93-
)
92+
const text = $('#__next').text()
93+
expect(text).toBe('')
94+
expect(JSON.parse($('#__NEXT_DATA__').html()).dynamicIds).toBeUndefined()
9495
})
9596

9697
it('should hydrate suspenses on client side with ssr disabled', async () => {
97-
writeComponent({ suspense: false, ssr: false })
9898
let browser
9999
try {
100100
browser = await webdriver(context.appPort, '/suspense/no-thrown')

test/integration/react-18/test/index.test.js

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
launchApp,
1111
nextBuild,
1212
nextStart,
13+
fetchViaHTTP,
1314
renderViaHTTP,
1415
} from 'next-test-utils'
1516
import dynamic from './dynamic'
@@ -91,53 +92,55 @@ describe('React 18 Support', () => {
9192
})
9293
afterAll(async () => await fs.remove(join(appDir, 'node_modules')))
9394

94-
test('prerelease version of React', async () => {
95-
const output = await getBuildOutput(appDir)
95+
test('prerelease version of react in dev', async () => {
96+
const output = await getDevOutput(appDir)
9697
expect(output).toMatch(USING_CREATE_ROOT)
9798
expect(output).toMatch(UNSUPPORTED_PRERELEASE)
9899
})
99100

100-
test('prerelease version of React', async () => {
101-
const output = await getDevOutput(appDir)
101+
test('prerelease version of react in build', async () => {
102+
const output = await getBuildOutput(appDir)
102103
expect(output).toMatch(USING_CREATE_ROOT)
103104
expect(output).toMatch(UNSUPPORTED_PRERELEASE)
104105
})
105106
})
106107
})
107108

108-
describe('React 18 Basic', () => {
109-
describe('Basic hydration', () => {
110-
let app
111-
let appPort
112-
beforeAll(async () => {
113-
await fs.remove(join(appDir, '.next'))
114-
await nextBuild(appDir, [appDir], { nodeArgs })
115-
appPort = await findPort()
116-
app = await nextStart(appDir, appPort, { nodeArgs })
117-
})
118-
afterAll(async () => {
119-
await killApp(app)
120-
})
121-
it('hydrates correctly for normal page', async () => {
122-
const browser = await webdriver(appPort, '/')
123-
expect(await browser.eval('window.didHydrate')).toBe(true)
124-
expect(await browser.elementById('react-dom-version').text()).toMatch(
125-
/18/
126-
)
127-
})
109+
describe('React 18 basics', () => {
110+
const context = {}
111+
beforeAll(async () => {
112+
await fs.remove(join(appDir, '.next'))
113+
await nextBuild(appDir, [appDir], { nodeArgs })
114+
context.appPort = await findPort()
115+
context.app = await nextStart(appDir, context.appPort, { nodeArgs })
116+
})
117+
afterAll(async () => {
118+
await killApp(context.app)
128119
})
129120

130-
describe('Dynamic import', () => {
131-
const context = {}
121+
it('hydrates correctly for normal page', async () => {
122+
const browser = await webdriver(context.appPort, '/')
123+
expect(await browser.eval('window.didHydrate')).toBe(true)
124+
expect(await browser.elementById('react-dom-version').text()).toMatch(/18/)
125+
})
132126

133-
beforeAll(async () => {
134-
context.appPort = await findPort()
135-
context.server = await launchApp(appDir, context.appPort, { nodeArgs })
136-
})
137-
afterAll(async () => {
138-
await killApp(context.server)
139-
})
127+
it('SSG works for suspense', async () => {
128+
const res1 = await fetchViaHTTP(context.appPort, '/suspense/thrown')
129+
const res2 = await fetchViaHTTP(context.appPort, '/suspense/no-thrown')
140130

141-
dynamic(context, (p, q) => renderViaHTTP(context.appPort, p, q))
131+
expect(res1.status).toBe(200)
132+
expect(res2.status).toBe(200)
133+
})
134+
})
135+
136+
describe('Dynamic import', () => {
137+
const context = {}
138+
beforeEach(async () => {
139+
context.appPort = await findPort()
140+
context.server = await launchApp(appDir, context.appPort, { nodeArgs })
141+
})
142+
afterEach(async () => {
143+
await killApp(context.server)
142144
})
145+
dynamic(context, (p, q) => renderViaHTTP(context.appPort, p, q))
143146
})

0 commit comments

Comments
 (0)