Skip to content

Commit 2f67055

Browse files
authored
test: use @browserless/test (#231)
1 parent 743acf2 commit 2f67055

File tree

8 files changed

+71
-55
lines changed

8 files changed

+71
-55
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"top-sites": "~1.1.220"
5757
},
5858
"devDependencies": {
59+
"@browserless/test": "latest",
5960
"@commitlint/cli": "latest",
6061
"@commitlint/config-conventional": "latest",
6162
"@ksmithut/prettier-standard": "latest",

test/encoding.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,38 @@
11
'use strict'
22

3+
const { getBrowserContext } = require('@browserless/test')
34
const test = require('ava')
45

5-
const { runFixtureServer, initBrowserless } = require('./helpers')
6+
const { runFixtureServer } = require('./helpers')
67
const getHTML = require('..')
78

8-
const getBrowserless = initBrowserless(test)
9-
109
;[false, true].forEach(prerender => {
1110
const mode = prerender ? 'prerender' : 'fetch'
1211

1312
test(`${mode} » Shift-JIS`, async t => {
1413
const url = await runFixtureServer(t, '51242_54045.html')
15-
const { html } = await getHTML(url, { prerender, getBrowserless })
14+
const { html } = await getHTML(url, {
15+
prerender,
16+
getBrowserless: () => getBrowserContext(t)
17+
})
1618
t.true(html.includes('或る日の小せん'))
1719
})
1820

1921
test(`${mode} » Windows-1250`, async t => {
2022
const url = await runFixtureServer(t, 'rp.pl.html')
21-
const { html } = await getHTML(url, { prerender, getBrowserless })
23+
const { html } = await getHTML(url, {
24+
prerender,
25+
getBrowserless: () => getBrowserContext(t)
26+
})
2227
t.true(html.includes('majątków'))
2328
})
2429

2530
test(`${mode} » UTF-8`, async t => {
2631
const url = await runFixtureServer(t, 'utf8.with.meta.html')
27-
const { html } = await getHTML(url, { prerender, getBrowserless })
32+
const { html } = await getHTML(url, {
33+
prerender,
34+
getBrowserless: () => getBrowserContext(t)
35+
})
2836
t.true(html.includes('日本語'))
2937
})
3038
})

test/helpers.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict'
22

33
const { default: listen } = require('async-listen')
4-
const createBrowserless = require('browserless')
54
const dateRegex = require('regex-iso-date')
65
const { createServer } = require('http')
76
const pretty = require('pretty')
@@ -18,12 +17,6 @@ const closeServer = server =>
1817
const fixture = name =>
1918
fs.readFileSync(path.join(__dirname, '/fixtures/', name))
2019

21-
const initBrowserless = test => {
22-
const browserlessFactory = createBrowserless()
23-
test.after.always(browserlessFactory.close)
24-
return () => browserlessFactory.createContext()
25-
}
26-
2720
const runServer = async (t, fn) => {
2821
const server = createServer(fn)
2922
const url = await listen(server)
@@ -42,7 +35,6 @@ const prettyHtml = html =>
4235

4336
module.exports = {
4437
createHeaders,
45-
initBrowserless,
4638
prettyHtml,
4739
runFixtureServer,
4840
runServer

test/index.js

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
'use strict'
22

3+
const { getBrowserContext } = require('@browserless/test')
34
const PCancelable = require('p-cancelable')
45
const cheerio = require('cheerio')
56
const test = require('ava')
67

7-
const { initBrowserless, runServer, prettyHtml } = require('./helpers')
8+
const { runServer, prettyHtml } = require('./helpers')
89
const getHTML = require('..')
910

10-
const getBrowserless = initBrowserless(test)
11-
1211
const wait = async (promise, prop) => {
1312
const res = await promise
1413
return prop ? res[prop] : res
@@ -37,17 +36,23 @@ test('promise is cancelable', async t => {
3736
test('reachable URL', async t => {
3837
const url = 'https://example.com'
3938
const [prerenderDisabled, prerenderEnabled] = await Promise.all([
40-
getHTML(url, { prerender: false, getBrowserless }),
39+
getHTML(url, {
40+
prerender: false,
41+
getBrowserless: () => getBrowserContext(t)
42+
}),
4143
getHTML(url, {
4244
prerender: true,
43-
getBrowserless,
45+
getBrowserless: () => getBrowserContext(t),
4446
puppeteerOpts: { adblock: false }
4547
})
4648
])
4749

4850
t.is(
4951
await wait(
50-
getHTML(url, { prerender: false, getBrowserless }),
52+
getHTML(url, {
53+
prerender: false,
54+
getBrowserless: () => getBrowserContext(t)
55+
}),
5156
'statusCode'
5257
),
5358
200
@@ -56,7 +61,7 @@ test('reachable URL', async t => {
5661
await wait(
5762
getHTML(url, {
5863
prerender: true,
59-
getBrowserless,
64+
getBrowserless: () => getBrowserContext(t),
6065
puppeteerOpts: { adblock: false }
6166
}),
6267
'statusCode'
@@ -82,12 +87,12 @@ test('timeout URL', async t => {
8287
const [prerenderDisabled, prerenderEnabled] = await Promise.all([
8388
getHTML(url, {
8489
prerender: false,
85-
getBrowserless,
90+
getBrowserless: () => getBrowserContext(t),
8691
gotOpts: { timeout: 1000 }
8792
}),
8893
getHTML(url, {
8994
prerender: true,
90-
getBrowserless,
95+
getBrowserless: () => getBrowserContext(t),
9196
puppeteerOpts: { timeout: 2000, adblock: false }
9297
})
9398
])
@@ -102,10 +107,13 @@ test('unreachable URL', async t => {
102107
const url = 'https://notexisturl.dev'
103108

104109
const [prerenderDisabled, prerenderEnabled] = await Promise.all([
105-
getHTML(url, { prerender: false, getBrowserless }),
110+
getHTML(url, {
111+
prerender: false,
112+
getBrowserless: () => getBrowserContext(t)
113+
}),
106114
getHTML(url, {
107115
prerender: true,
108-
getBrowserless,
116+
getBrowserless: () => getBrowserContext(t),
109117
puppeteerOpts: { adblock: false }
110118
})
111119
])
@@ -120,7 +128,7 @@ test('from audio URL', async t => {
120128
const targetUrl =
121129
'https://audiodemos.github.io/vctk_set0/embedadapt_100sample.wav'
122130
const { url, stats, html } = await getHTML(targetUrl, {
123-
getBrowserless,
131+
getBrowserless: () => getBrowserContext(t),
124132
prerender: false
125133
})
126134

@@ -131,7 +139,9 @@ test('from audio URL', async t => {
131139

132140
test('from image URL', async t => {
133141
const targetUrl = 'https://kikobeats.com/images/avatar.jpg'
134-
const { url, stats, html } = await getHTML(targetUrl, { getBrowserless })
142+
const { url, stats, html } = await getHTML(targetUrl, {
143+
getBrowserless: () => getBrowserContext(t)
144+
})
135145

136146
t.is(stats.mode, 'fetch')
137147
t.is(url, targetUrl)
@@ -144,15 +154,19 @@ test('from image URL', async t => {
144154

145155
test('from SVG image URL', async t => {
146156
const targetUrl = 'https://cdn.microlink.io/file-examples/sample.svg'
147-
const { stats } = await getHTML(targetUrl, { getBrowserless })
157+
const { stats } = await getHTML(targetUrl, {
158+
getBrowserless: () => getBrowserContext(t)
159+
})
148160
t.true(stats.timing < 3000)
149161
t.is(stats.mode, 'fetch')
150162
})
151163

152164
test('from big image URL', async t => {
153165
const targetUrl =
154166
'https://static.jutarnji.hr/images/live-multimedia/binary/2016/6/17/10/iStock_82744687_XXLARGE.jpg'
155-
const { stats } = await getHTML(targetUrl, { getBrowserless })
167+
const { stats } = await getHTML(targetUrl, {
168+
getBrowserless: () => getBrowserContext(t)
169+
})
156170
t.true(stats.timing < 3000)
157171
t.is(stats.mode, 'fetch')
158172
})
@@ -162,7 +176,7 @@ test('from URL with no content type', async t => {
162176
res.end('<!doctype html><title>.</title>')
163177
})
164178
const { stats } = await getHTML(targetUrl, {
165-
getBrowserless,
179+
getBrowserless: () => getBrowserContext(t),
166180
prerender: false
167181
})
168182
t.is(stats.mode, 'fetch')
@@ -171,7 +185,9 @@ test('from URL with no content type', async t => {
171185
test('from image URL that returns HTML markup', async t => {
172186
const targetUrl =
173187
'https://www.europapress.es/chance/gente/%7B%7BrutaFoto%7D%7D%7B%7Bfechor%7D%7D_%7B%7BanchoFoto%7D%7D_%7B%7BaltoFoto%7D%7D%7B%7BversionFoto%7D%7D.jpg'
174-
const { stats } = await getHTML(targetUrl, { getBrowserless })
188+
const { stats } = await getHTML(targetUrl, {
189+
getBrowserless: () => getBrowserContext(t)
190+
})
175191
t.true(stats.timing < 3000)
176192
t.is(stats.mode, 'fetch')
177193
})
@@ -180,7 +196,7 @@ test('from video URL', async t => {
180196
const targetUrl = 'https://cdn.microlink.io/file-examples/sample.mp4'
181197
const { url, stats, html } = await getHTML(targetUrl, {
182198
prerender: false,
183-
getBrowserless
199+
getBrowserless: () => getBrowserContext(t)
184200
})
185201

186202
t.is(stats.mode, 'fetch')
@@ -192,7 +208,7 @@ test('from bad SSL URL', async t => {
192208
const targetUrl = 'https://self-signed.badssl.com/'
193209
const { url, stats, html } = await getHTML(targetUrl, {
194210
prerender: false,
195-
getBrowserless,
211+
getBrowserless: () => getBrowserContext(t),
196212
gotOpts: {
197213
https: { rejectUnauthorized: false }
198214
}

test/mode.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,31 @@
11
'use strict'
22

3+
const { getBrowserContext } = require('@browserless/test')
34
const test = require('ava')
45

56
const getHTML = require('../src')
6-
const { initBrowserless } = require('./helpers')
7-
8-
const getBrowserless = initBrowserless(test)
97

108
test('`{ prerender: true }`', async t => {
119
const url = 'https://example.com'
12-
const { stats } = await getHTML(url, { getBrowserless })
10+
const { stats } = await getHTML(url, {
11+
getBrowserless: () => getBrowserContext(t)
12+
})
1313
t.is(stats.mode, 'prerender')
1414
})
1515

1616
test('`{ prerender: false }`', async t => {
1717
const url = 'https://example.com'
18-
const { stats } = await getHTML(url, { prerender: false, getBrowserless })
18+
const { stats } = await getHTML(url, {
19+
prerender: false,
20+
getBrowserless: () => getBrowserContext(t)
21+
})
1922
t.is(stats.mode, 'fetch')
2023
})
2124

2225
test("`{ prerender: 'auto' }`", async t => {
2326
const url = 'https://google.com'
2427
const { stats } = await getHTML(url, {
25-
getBrowserless,
28+
getBrowserless: () => getBrowserContext(t),
2629
puppeteerOpts: { adblock: false }
2730
})
2831
t.is(stats.mode, 'fetch')
@@ -33,7 +36,7 @@ test.skip('prerender error fallback into fetch mode', async t => {
3336
'https://www.sportsnet.ca/hockey/nhl/leafs-john-tavares-return-new-york-hope-positive/'
3437
const { stats, html } = await getHTML(url, {
3538
prerender: true,
36-
getBrowserless,
39+
getBrowserless: () => getBrowserContext(t),
3740
puppeteerOpts: { adblock: false }
3841
})
3942
t.true(!!html)

test/pdf.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
'use strict'
22

3+
const { getBrowserContext } = require('@browserless/test')
34
const cheerio = require('cheerio')
45
const test = require('ava')
56

6-
const { initBrowserless, prettyHtml } = require('./helpers')
7+
const { prettyHtml } = require('./helpers')
78
const getHTML = require('..')
89

9-
const getBrowserless = initBrowserless(test)
10-
1110
const PDF_OVER_TRESHOLD = 'https://cdn.microlink.io/file-examples/sample.pdf'
1211
const PDF_UNDER_TRESHOLD = 'https://pdfobject.com/pdf/sample.pdf'
1312

1413
test('disable if `mutool` is not installed', async t => {
1514
const targetUrl = 'https://cdn.microlink.io/file-examples/sample.pdf'
1615
const { url, stats, html } = await getHTML(targetUrl, {
1716
mutool: false,
18-
getBrowserless
17+
getBrowserless: () => getBrowserContext(t)
1918
})
2019

2120
const $ = cheerio.load(html)
@@ -29,7 +28,7 @@ test('disable if `mutool` is not installed', async t => {
2928
test('turn PDF into HTML markup over the treshold', async t => {
3029
const targetUrl = PDF_OVER_TRESHOLD
3130
const { url, stats, html } = await getHTML(targetUrl, {
32-
getBrowserless
31+
getBrowserless: () => getBrowserContext(t)
3332
})
3433

3534
const $ = cheerio.load(html)
@@ -44,7 +43,7 @@ test('turn PDF into HTML markup over the treshold', async t => {
4443
test('turn PDF into HTML markup under the treshold', async t => {
4544
const targetUrl = PDF_UNDER_TRESHOLD
4645
const { url, stats, html } = await getHTML(targetUrl, {
47-
getBrowserless
46+
getBrowserless: () => getBrowserContext(t)
4847
})
4948
const $ = cheerio.load(html)
5049
t.is(url, targetUrl)

test/redirects.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
'use strict'
22

3+
const { getBrowserContext } = require('@browserless/test')
34
const test = require('ava')
45

5-
const { initBrowserless } = require('./helpers')
66
const getHTML = require('..')
77

8-
const getBrowserless = initBrowserless(test)
9-
108
;[true, false].forEach(prerender => {
119
const mode = prerender ? 'prerender' : 'fetch'
1210

@@ -16,7 +14,7 @@ const getBrowserless = initBrowserless(test)
1614

1715
const { redirects } = await getHTML(targetUrl, {
1816
prerender,
19-
getBrowserless
17+
getBrowserless: () => getBrowserContext(t)
2018
})
2119

2220
t.deepEqual(redirects, [

test/url.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
'use strict'
22

3+
const { getBrowserContext } = require('@browserless/test')
34
const test = require('ava')
45

5-
const { initBrowserless, runServer, prettyHtml } = require('./helpers')
6+
const { runServer, prettyHtml } = require('./helpers')
67
const getHTML = require('..')
78

8-
const getBrowserless = initBrowserless(test)
9-
109
;[false, true].forEach(prerender => {
1110
const mode = prerender ? 'prerender' : 'fetch'
1211
test(`${mode} » as string`, async t => {
1312
const url = await runServer(t, (_, res) =>
1413
res.end('<!doctype html><title>.</title>')
1514
)
1615
const { html } = await getHTML(url.toString(), {
17-
getBrowserless,
16+
getBrowserless: () => getBrowserContext(t),
1817
prerender,
1918
puppeteerOpts: { adblock: false, animations: true }
2019
})
@@ -38,7 +37,7 @@ const getBrowserless = initBrowserless(test)
3837
res.end('<!doctype html><title>.</title>')
3938
)
4039
const { html } = await getHTML(url, {
41-
getBrowserless,
40+
getBrowserless: () => getBrowserContext(t),
4241
prerender,
4342
puppeteerOpts: { adblock: false, animations: true }
4443
})

0 commit comments

Comments
 (0)