forked from vercel/next.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmulti-zone.test.ts
More file actions
95 lines (83 loc) · 2.79 KB
/
multi-zone.test.ts
File metadata and controls
95 lines (83 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import { createNextDescribe } from 'e2e-utils'
import { check, waitFor } from 'next-test-utils'
import path from 'path'
createNextDescribe(
'multi-zone',
{
files: path.join(__dirname, 'app'),
skipDeployment: true,
buildCommand: 'pnpm build',
startCommand: (global as any).isNextDev ? 'pnpm dev' : 'pnpm start',
packageJson: {
scripts: {
dev: 'node server.js',
build: 'next build apps/host && next build apps/guest',
start: 'NODE_ENV=production node server.js',
'post-build': 'echo done',
},
},
dependencies: require('./app/package.json').dependencies,
},
({ next, isNextDev }) => {
it.each([
{ pathname: '/', content: ['hello from host app'] },
{ pathname: '/guest', content: ['hello from guest app'] },
{
pathname: '/blog/post-1',
content: ['hello from host app /blog/[slug]'],
},
{
pathname: '/guest/blog/post-1',
content: ['hello from guest app /blog/[slug]'],
},
{
pathname: '/guest/another/post-1',
content: ['hello from guest app /another/[slug]'],
},
])(
'should correctly respond for $pathname',
async ({ pathname, content }) => {
const res = await next.fetch(pathname, {
redirect: 'manual',
})
expect(res.status).toBe(200)
const html = await res.text()
for (const item of content) {
expect(html).toContain(item)
}
}
)
if (isNextDev) {
async function runHMRTest(app: string) {
const isHostApp = app === 'host'
const browser = await next.browser(isHostApp ? '/' : app)
expect(await browser.elementByCss('body').text()).toContain(
`hello from ${app} app`
)
const initialTimestamp = await browser.elementById('now').text()
expect(await browser.elementByCss('body').text()).not.toContain(
'hmr content'
)
await waitFor(1000)
// verify that the page isn't unexpectedly reloading in the background
const newTimestamp = await browser.elementById('now').text()
expect(newTimestamp).toBe(initialTimestamp)
// trigger HMR
const filePath = `apps/${app}/pages/index.tsx`
const content = await next.readFile(filePath)
const patchedContent = content.replace(
`const editedContent = ''`,
`const editedContent = 'hmr content'`
)
await next.patchFile(filePath, patchedContent)
await check(() => browser.elementByCss('body').text(), /hmr content/)
// restore original content
await next.patchFile(filePath, content)
}
it('should support HMR in both apps', async () => {
await runHMRTest('host')
await runHMRTest('guest')
})
}
}
)