forked from vercel/next.js
/
index.test.js
130 lines (112 loc) · 3.35 KB
/
index.test.js
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
128
129
130
import {
fetchViaHTTP,
File,
findPort,
killApp,
launchApp,
retry,
} from 'next-test-utils'
import { join } from 'path'
import webdriver from 'next-webdriver'
const context = {
appDir: join(__dirname, '../'),
logs: { output: '', stdout: '', stderr: '' },
middleware: new File(join(__dirname, '../middleware.js')),
}
describe('Middleware development errors', () => {
beforeEach(async () => {
context.logs = { output: '', stdout: '', stderr: '' }
context.appPort = await findPort()
context.app = await launchApp(context.appDir, context.appPort, {
onStdout(msg) {
context.logs.output += msg
context.logs.stdout += msg
},
onStderr(msg) {
context.logs.output += msg
context.logs.stderr += msg
},
})
})
afterEach(() => {
context.middleware.restore()
if (context.app) {
killApp(context.app)
}
})
async function assertMiddlewareFetch(hasMiddleware, path = '/') {
const res = await fetchViaHTTP(context.appPort, path)
expect(res.status).toBe(200)
expect(res.headers.get('x-from-middleware')).toBe(
hasMiddleware ? 'true' : null
)
}
async function assertMiddlewareRender(hasMiddleware, path = '/') {
const browser = await webdriver(context.appPort, path)
const fromMiddleware = await browser.elementById('from-middleware').text()
expect(fromMiddleware).toBe(hasMiddleware ? 'true' : '')
}
describe('when middleware is removed', () => {
beforeEach(async () => {
await assertMiddlewareFetch(true)
context.middleware.delete()
})
it('sends response correctly', async () => {
await assertMiddlewareFetch(false)
await assertMiddlewareRender(false)
// assert no extra message on stderr
expect(context.logs.stderr).toBe('')
})
})
describe('when middleware is removed and re-added', () => {
beforeEach(async () => {
await assertMiddlewareFetch(true)
context.middleware.delete()
await assertMiddlewareFetch(false)
context.middleware.restore()
})
it('sends response correctly', async () => {
await assertMiddlewareFetch(true)
// FIXME: the test passes but an error occurs in browser
// await assertMiddlewareRender(true)
})
})
describe('when middleware is added', () => {
beforeEach(async () => {
context.middleware.delete()
await assertMiddlewareFetch(false)
context.middleware.restore()
})
it('sends response correctly', async () => {
await retry(() => assertMiddlewareFetch(true))
// FIXME: the test passes but an error occurs in browser
// assertMiddlewareRender(true)
})
})
describe('when matcher is added', () => {
beforeEach(async () => {
context.middleware.write(
context.middleware.originalContent +
`
export const config = {
matcher: '/',
}
`
)
await assertMiddlewareFetch(true)
context.middleware.write(
context.middleware.originalContent +
`
export const config = {
matcher: '/asdf',
}
`
)
})
it('sends response correctly', async () => {
await retry(() => assertMiddlewareFetch(true, '/asdf'))
// FIXME: the test passes but an error occurs in browser
// await retry(() => assertMiddlewareRender(true, '/asdf'))
})
})
})