Skip to content

Commit f9286f7

Browse files
authored
[WIP] Improve test setup (vercel#1372)
* Run tests serially. * Make test result verbose. * Don't wait until closing the browser. * Add some debug logs. * Add bailing support. * Get the browser with a timeout. * Add some comments. * Remove istanbul babel tranformation. Jest already do it and it's breaking our coveralls hit.
1 parent 634a624 commit f9286f7

File tree

5 files changed

+71
-34
lines changed

5 files changed

+71
-34
lines changed

.babelrc

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,6 @@
99
"transform-runtime"
1010
],
1111
"env": {
12-
"test-build": {
13-
"plugins": [
14-
"istanbul"
15-
]
16-
},
1712
"test": {
1813
"presets": [
1914
"es2015",

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
"pretestonly": "fly pretest",
2929
"testonly": "cross-env NODE_PATH=test/lib jest \\.test.js",
3030
"posttestonly": "fly posttest",
31-
"pretest": "npm run lint && cross-env NODE_ENV=test-build npm run release",
32-
"test": "npm run testonly -- --coverage --forceExit",
31+
"pretest": "npm run lint",
32+
"test": "npm run testonly -- --coverage --forceExit --runInBand --verbose --bail",
3333
"coveralls": "nyc --instrument=false --source-map=false report --temp-directory=./coverage --reporter=text-lcov | coveralls",
3434
"lint": "standard 'bin/*' 'client/**/*.js' 'examples/**/*.js' 'lib/**/*.js' 'pages/**/*.js' 'server/**/*.js' 'test/**/*.js'",
3535
"prepublish": "npm run release",
@@ -90,7 +90,7 @@
9090
"devDependencies": {
9191
"babel-eslint": "7.1.1",
9292
"babel-jest": "18.0.0",
93-
"babel-plugin-istanbul": "3.0.0",
93+
"babel-plugin-istanbul": "4.0.0",
9494
"babel-plugin-transform-remove-strict-mode": "0.0.2",
9595
"babel-preset-es2015": "6.22.0",
9696
"benchmark": "2.1.3",

test/integration/basic/test/client-navigation.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export default (context, render) => {
1313
.elementByCss('p').text()
1414

1515
expect(text).toBe('This is the about page.')
16-
await browser.close()
16+
browser.close()
1717
})
1818

1919
it('should navigate via the client side', async () => {
@@ -28,7 +28,7 @@ export default (context, render) => {
2828
.elementByCss('#counter').text()
2929

3030
expect(counterText).toBe('Counter: 1')
31-
await browser.close()
31+
browser.close()
3232
})
3333
})
3434

@@ -41,7 +41,7 @@ export default (context, render) => {
4141
.elementByCss('p').text()
4242

4343
expect(text).toBe('This is the home.')
44-
await browser.close()
44+
browser.close()
4545
})
4646
})
4747

@@ -56,7 +56,7 @@ export default (context, render) => {
5656
const expectedErrorMessage = '"EmptyInitialPropsPage.getInitialProps()" should resolve to an object. But found "null" instead.'
5757
expect(preText.includes(expectedErrorMessage)).toBeTruthy()
5858

59-
await browser.close()
59+
browser.close()
6060
})
6161
})
6262

@@ -69,7 +69,7 @@ export default (context, render) => {
6969
.elementByCss('p').text()
7070

7171
expect(text).toBe('2')
72-
await browser.close()
72+
browser.close()
7373
})
7474

7575
it('should remove querystring', async () => {
@@ -80,7 +80,7 @@ export default (context, render) => {
8080
.elementByCss('p').text()
8181

8282
expect(text).toBe('0')
83-
await browser.close()
83+
browser.close()
8484
})
8585
})
8686

@@ -95,7 +95,7 @@ export default (context, render) => {
9595
.elementByCss('p').text()
9696

9797
expect(countAfterClicked).toBe('COUNT: 1')
98-
await browser.close()
98+
browser.close()
9999
})
100100

101101
it('should always replace the state', async () => {
@@ -116,7 +116,7 @@ export default (context, render) => {
116116
.back()
117117
.waitForElementByCss('.nav-home')
118118

119-
await browser.close()
119+
browser.close()
120120
})
121121
})
122122

@@ -131,7 +131,7 @@ export default (context, render) => {
131131

132132
expect(counter).toBe('COUNT: 0')
133133

134-
await browser.close()
134+
browser.close()
135135
})
136136
})
137137

@@ -145,7 +145,7 @@ export default (context, render) => {
145145

146146
expect(counter).toBe('COUNT: 0')
147147

148-
await browser.close()
148+
browser.close()
149149
})
150150
})
151151

@@ -160,7 +160,7 @@ export default (context, render) => {
160160

161161
expect(counter).toBe('COUNT: 1')
162162

163-
await browser.close()
163+
browser.close()
164164
})
165165
})
166166

@@ -175,7 +175,7 @@ export default (context, render) => {
175175

176176
expect(counter).toBe('COUNT: 0')
177177

178-
await browser.close()
178+
browser.close()
179179
})
180180
})
181181
})
@@ -193,7 +193,7 @@ export default (context, render) => {
193193
.elementByCss('#get-initial-props-run-count').text()
194194
expect(getInitialPropsRunCount).toBe('getInitialProps run count: 1')
195195

196-
await browser.close()
196+
browser.close()
197197
})
198198

199199
it('should handle the back button and should not run getInitialProps', async () => {
@@ -213,7 +213,7 @@ export default (context, render) => {
213213
.elementByCss('#get-initial-props-run-count').text()
214214
expect(getInitialPropsRunCount).toBe('getInitialProps run count: 1')
215215

216-
await browser.close()
216+
browser.close()
217217
})
218218

219219
it('should run getInitialProps always when rending the page to the screen', async () => {
@@ -233,7 +233,7 @@ export default (context, render) => {
233233
.elementByCss('#get-initial-props-run-count').text()
234234
expect(getInitialPropsRunCount).toBe('getInitialProps run count: 2')
235235

236-
await browser.close()
236+
browser.close()
237237
})
238238
})
239239
})

test/lib/next-webdriver.js

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,51 @@ import wd from 'wd'
22

33
export default async function (appPort, pathname) {
44
const url = `http://localhost:${appPort}${pathname}`
5+
console.log(`> Start loading browser with url: ${url}`)
56

7+
// Sometimes browser won't initialize due to some random issues.
8+
// So, we need to timeout the initialization and retry again.
9+
for (let lc = 0; lc < 5; lc++) {
10+
try {
11+
const browser = await getBrowser(url, 5000)
12+
console.log(`> Complete loading browser with url: ${url}`)
13+
return browser
14+
} catch (ex) {
15+
console.warn(`> Error when loading browser with url: ${url}`)
16+
if (ex.message === 'TIMEOUT') continue
17+
throw ex
18+
}
19+
}
20+
21+
console.error(`> Tried 5 times. Cannot load the browser for url: ${url}`)
22+
throw new Error(`Couldn't start the browser for url: ${url}`)
23+
}
24+
25+
function getBrowser (url, timeout) {
626
const browser = wd.promiseChainRemote('http://localhost:9515/')
7-
await browser.init({browserName: 'chrome'}).get(url)
827

9-
return browser
28+
return new Promise((resolve, reject) => {
29+
let timeouted = false
30+
const timeoutHandler = setTimeout(() => {
31+
timeouted = true
32+
const error = new Error('TIMEOUT')
33+
reject(error)
34+
}, timeout)
35+
36+
browser.init({browserName: 'chrome'}).get(url, (err) => {
37+
if (timeouted) {
38+
browser.close()
39+
return
40+
}
41+
42+
clearTimeout(timeoutHandler)
43+
44+
if (err) {
45+
reject(err)
46+
return
47+
}
48+
49+
resolve(browser)
50+
})
51+
})
1052
}

yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,15 @@ babel-plugin-check-es2015-constants@^6.22.0:
467467
dependencies:
468468
babel-runtime "^6.22.0"
469469

470-
babel-plugin-istanbul@3.0.0, babel-plugin-istanbul@^3.0.0:
470+
babel-plugin-istanbul@4.0.0, babel-plugin-istanbul@^4.0.0:
471+
version "4.0.0"
472+
resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.0.0.tgz#36bde8fbef4837e5ff0366531a2beabd7b1ffa10"
473+
dependencies:
474+
find-up "^2.1.0"
475+
istanbul-lib-instrument "^1.4.2"
476+
test-exclude "^4.0.0"
477+
478+
babel-plugin-istanbul@^3.0.0:
471479
version "3.0.0"
472480
resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-3.0.0.tgz#da7324520ae0b8a44b6a078e72e883374a9fab76"
473481
dependencies:
@@ -476,14 +484,6 @@ babel-plugin-istanbul@3.0.0, babel-plugin-istanbul@^3.0.0:
476484
object-assign "^4.1.0"
477485
test-exclude "^3.2.2"
478486

479-
babel-plugin-istanbul@^4.0.0:
480-
version "4.0.0"
481-
resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.0.0.tgz#36bde8fbef4837e5ff0366531a2beabd7b1ffa10"
482-
dependencies:
483-
find-up "^2.1.0"
484-
istanbul-lib-instrument "^1.4.2"
485-
test-exclude "^4.0.0"
486-
487487
babel-plugin-jest-hoist@^18.0.0:
488488
version "18.0.0"
489489
resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-18.0.0.tgz#4150e70ecab560e6e7344adc849498072d34e12a"

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy