-
Notifications
You must be signed in to change notification settings - Fork 28.3k
/
Copy pathindex.test.ts
127 lines (110 loc) · 3.97 KB
/
index.test.ts
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import {
assertHasRedbox,
assertNoRedbox,
getRedboxHeader,
getRedboxSource,
retry,
getRedboxDescription,
} from 'next-test-utils'
import { nextTestSetup } from 'e2e-utils'
describe('Conflict between app file and pages file', () => {
const { next, isNextDev, isNextStart, skipped } = nextTestSetup({
files: __dirname,
skipDeployment: true,
skipStart: true,
})
if (skipped) {
return
}
if (isNextStart) {
it('should print error for conflicting app/page', async () => {
const { cliOutput } = await next.build()
if (process.env.TURBOPACK) {
expect(cliOutput).toContain(
'App Router and Pages Router both match path: /'
)
expect(cliOutput).toContain(
'App Router and Pages Router both match path: /another'
)
} else {
expect(cliOutput).toMatch(
/Conflicting app and page files? (were|was) found/
)
for (const [pagePath, appPath] of [
['pages/index.js', 'app/page.js'],
['pages/another.js', 'app/another/page.js'],
]) {
expect(cliOutput).toContain(`"${pagePath}" - "${appPath}"`)
}
}
expect(cliOutput).not.toContain('/non-conflict-pages')
expect(cliOutput).not.toContain('/non-conflict')
})
}
async function containConflictsError(browser, conflicts) {
await retry(async () => {
await assertHasRedbox(browser)
if (process.env.TURBOPACK) {
expect(await getRedboxDescription(browser)).toContain(
'App Router and Pages Router both match path:'
)
}
if (!process.env.TURBOPACK) {
for (const pair of conflicts) {
expect(await getRedboxSource(browser)).toContain(
`"${pair[0]}" - "${pair[1]}"`
)
}
}
})
}
if (isNextDev) {
it('should show error overlay for /another', async () => {
await next.start()
const browser = await next.browser('/another')
await assertHasRedbox(browser)
await containConflictsError(browser, [
['pages/index.js', 'app/page.js'],
['pages/another.js', 'app/another/page.js'],
])
})
it('should show error overlay for /', async () => {
const browser = await next.browser('/')
await assertHasRedbox(browser)
await containConflictsError(browser, [
['pages/index.js', 'app/page.js'],
['pages/another.js', 'app/another/page.js'],
])
})
it('should support hmr with conflicts', async () => {
const browser = await next.browser('/')
await assertHasRedbox(browser)
await next.renameFile('pages/index.js', 'pages/index2.js')
await next.renameFile('pages/another.js', 'pages/another2.js')
// Wait for successful recompilation
await browser.loadPage(next.url + '/')
await assertNoRedbox(browser)
expect(await browser.elementByCss('p').text()).toContain('index - app')
await browser.loadPage(next.url + '/another')
expect(await browser.elementByCss('p').text()).toBe('another - app')
})
it('should not show error overlay for non conflict pages under app or pages dir', async () => {
const browser = await next.browser('/non-conflict')
await assertNoRedbox(browser)
expect(await getRedboxHeader(browser)).toEqual(null)
expect(await browser.elementByCss('p').text()).toBe('non-conflict app')
await browser.loadPage(next.url + '/non-conflict-pages')
await assertNoRedbox(browser)
expect(await getRedboxHeader(browser)).toEqual(null)
expect(await browser.elementByCss('h1').text()).toBe('non-conflict pages')
})
it('should error again when there is new conflict', async () => {
const browser = await next.browser('/')
await assertNoRedbox(browser)
// Re-trigger the conflicted errors
await next.renameFile('pages/index2.js', 'pages/index.js')
await assertHasRedbox(browser)
await containConflictsError(browser, [['pages/index.js', 'app/page.js']])
})
}
})