From 8655cc80a90ec9cf6b89ba93d158003d45134958 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Sun, 28 Dec 2025 21:13:05 +0100 Subject: [PATCH] test: use @browserless/test --- package.json | 1 + test/encoding.js | 20 ++++++++++++------ test/helpers.js | 8 ------- test/index.js | 54 ++++++++++++++++++++++++++++++----------------- test/mode.js | 17 +++++++++------ test/pdf.js | 11 +++++----- test/redirects.js | 6 ++---- test/url.js | 9 ++++---- 8 files changed, 71 insertions(+), 55 deletions(-) diff --git a/package.json b/package.json index 9372e73..5d835c9 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "top-sites": "~1.1.220" }, "devDependencies": { + "@browserless/test": "latest", "@commitlint/cli": "latest", "@commitlint/config-conventional": "latest", "@ksmithut/prettier-standard": "latest", diff --git a/test/encoding.js b/test/encoding.js index 01868f2..1542861 100644 --- a/test/encoding.js +++ b/test/encoding.js @@ -1,30 +1,38 @@ 'use strict' +const { getBrowserContext } = require('@browserless/test') const test = require('ava') -const { runFixtureServer, initBrowserless } = require('./helpers') +const { runFixtureServer } = require('./helpers') const getHTML = require('..') -const getBrowserless = initBrowserless(test) - ;[false, true].forEach(prerender => { const mode = prerender ? 'prerender' : 'fetch' test(`${mode} » Shift-JIS`, async t => { const url = await runFixtureServer(t, '51242_54045.html') - const { html } = await getHTML(url, { prerender, getBrowserless }) + const { html } = await getHTML(url, { + prerender, + getBrowserless: () => getBrowserContext(t) + }) t.true(html.includes('或る日の小せん')) }) test(`${mode} » Windows-1250`, async t => { const url = await runFixtureServer(t, 'rp.pl.html') - const { html } = await getHTML(url, { prerender, getBrowserless }) + const { html } = await getHTML(url, { + prerender, + getBrowserless: () => getBrowserContext(t) + }) t.true(html.includes('majątków')) }) test(`${mode} » UTF-8`, async t => { const url = await runFixtureServer(t, 'utf8.with.meta.html') - const { html } = await getHTML(url, { prerender, getBrowserless }) + const { html } = await getHTML(url, { + prerender, + getBrowserless: () => getBrowserContext(t) + }) t.true(html.includes('日本語')) }) }) diff --git a/test/helpers.js b/test/helpers.js index 0471a24..b3f0907 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -1,7 +1,6 @@ 'use strict' const { default: listen } = require('async-listen') -const createBrowserless = require('browserless') const dateRegex = require('regex-iso-date') const { createServer } = require('http') const pretty = require('pretty') @@ -18,12 +17,6 @@ const closeServer = server => const fixture = name => fs.readFileSync(path.join(__dirname, '/fixtures/', name)) -const initBrowserless = test => { - const browserlessFactory = createBrowserless() - test.after.always(browserlessFactory.close) - return () => browserlessFactory.createContext() -} - const runServer = async (t, fn) => { const server = createServer(fn) const url = await listen(server) @@ -42,7 +35,6 @@ const prettyHtml = html => module.exports = { createHeaders, - initBrowserless, prettyHtml, runFixtureServer, runServer diff --git a/test/index.js b/test/index.js index 3db7b87..5292d75 100644 --- a/test/index.js +++ b/test/index.js @@ -1,14 +1,13 @@ 'use strict' +const { getBrowserContext } = require('@browserless/test') const PCancelable = require('p-cancelable') const cheerio = require('cheerio') const test = require('ava') -const { initBrowserless, runServer, prettyHtml } = require('./helpers') +const { runServer, prettyHtml } = require('./helpers') const getHTML = require('..') -const getBrowserless = initBrowserless(test) - const wait = async (promise, prop) => { const res = await promise return prop ? res[prop] : res @@ -37,17 +36,23 @@ test('promise is cancelable', async t => { test('reachable URL', async t => { const url = 'https://example.com' const [prerenderDisabled, prerenderEnabled] = await Promise.all([ - getHTML(url, { prerender: false, getBrowserless }), + getHTML(url, { + prerender: false, + getBrowserless: () => getBrowserContext(t) + }), getHTML(url, { prerender: true, - getBrowserless, + getBrowserless: () => getBrowserContext(t), puppeteerOpts: { adblock: false } }) ]) t.is( await wait( - getHTML(url, { prerender: false, getBrowserless }), + getHTML(url, { + prerender: false, + getBrowserless: () => getBrowserContext(t) + }), 'statusCode' ), 200 @@ -56,7 +61,7 @@ test('reachable URL', async t => { await wait( getHTML(url, { prerender: true, - getBrowserless, + getBrowserless: () => getBrowserContext(t), puppeteerOpts: { adblock: false } }), 'statusCode' @@ -82,12 +87,12 @@ test('timeout URL', async t => { const [prerenderDisabled, prerenderEnabled] = await Promise.all([ getHTML(url, { prerender: false, - getBrowserless, + getBrowserless: () => getBrowserContext(t), gotOpts: { timeout: 1000 } }), getHTML(url, { prerender: true, - getBrowserless, + getBrowserless: () => getBrowserContext(t), puppeteerOpts: { timeout: 2000, adblock: false } }) ]) @@ -102,10 +107,13 @@ test('unreachable URL', async t => { const url = 'https://notexisturl.dev' const [prerenderDisabled, prerenderEnabled] = await Promise.all([ - getHTML(url, { prerender: false, getBrowserless }), + getHTML(url, { + prerender: false, + getBrowserless: () => getBrowserContext(t) + }), getHTML(url, { prerender: true, - getBrowserless, + getBrowserless: () => getBrowserContext(t), puppeteerOpts: { adblock: false } }) ]) @@ -120,7 +128,7 @@ test('from audio URL', async t => { const targetUrl = 'https://audiodemos.github.io/vctk_set0/embedadapt_100sample.wav' const { url, stats, html } = await getHTML(targetUrl, { - getBrowserless, + getBrowserless: () => getBrowserContext(t), prerender: false }) @@ -131,7 +139,9 @@ test('from audio URL', async t => { test('from image URL', async t => { const targetUrl = 'https://kikobeats.com/images/avatar.jpg' - const { url, stats, html } = await getHTML(targetUrl, { getBrowserless }) + const { url, stats, html } = await getHTML(targetUrl, { + getBrowserless: () => getBrowserContext(t) + }) t.is(stats.mode, 'fetch') t.is(url, targetUrl) @@ -144,7 +154,9 @@ test('from image URL', async t => { test('from SVG image URL', async t => { const targetUrl = 'https://cdn.microlink.io/file-examples/sample.svg' - const { stats } = await getHTML(targetUrl, { getBrowserless }) + const { stats } = await getHTML(targetUrl, { + getBrowserless: () => getBrowserContext(t) + }) t.true(stats.timing < 3000) t.is(stats.mode, 'fetch') }) @@ -152,7 +164,9 @@ test('from SVG image URL', async t => { test('from big image URL', async t => { const targetUrl = 'https://static.jutarnji.hr/images/live-multimedia/binary/2016/6/17/10/iStock_82744687_XXLARGE.jpg' - const { stats } = await getHTML(targetUrl, { getBrowserless }) + const { stats } = await getHTML(targetUrl, { + getBrowserless: () => getBrowserContext(t) + }) t.true(stats.timing < 3000) t.is(stats.mode, 'fetch') }) @@ -162,7 +176,7 @@ test('from URL with no content type', async t => { res.end('.') }) const { stats } = await getHTML(targetUrl, { - getBrowserless, + getBrowserless: () => getBrowserContext(t), prerender: false }) t.is(stats.mode, 'fetch') @@ -171,7 +185,9 @@ test('from URL with no content type', async t => { test('from image URL that returns HTML markup', async t => { const targetUrl = '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' - const { stats } = await getHTML(targetUrl, { getBrowserless }) + const { stats } = await getHTML(targetUrl, { + getBrowserless: () => getBrowserContext(t) + }) t.true(stats.timing < 3000) t.is(stats.mode, 'fetch') }) @@ -180,7 +196,7 @@ test('from video URL', async t => { const targetUrl = 'https://cdn.microlink.io/file-examples/sample.mp4' const { url, stats, html } = await getHTML(targetUrl, { prerender: false, - getBrowserless + getBrowserless: () => getBrowserContext(t) }) t.is(stats.mode, 'fetch') @@ -192,7 +208,7 @@ test('from bad SSL URL', async t => { const targetUrl = 'https://self-signed.badssl.com/' const { url, stats, html } = await getHTML(targetUrl, { prerender: false, - getBrowserless, + getBrowserless: () => getBrowserContext(t), gotOpts: { https: { rejectUnauthorized: false } } diff --git a/test/mode.js b/test/mode.js index 41eeb01..76dcc6b 100644 --- a/test/mode.js +++ b/test/mode.js @@ -1,28 +1,31 @@ 'use strict' +const { getBrowserContext } = require('@browserless/test') const test = require('ava') const getHTML = require('../src') -const { initBrowserless } = require('./helpers') - -const getBrowserless = initBrowserless(test) test('`{ prerender: true }`', async t => { const url = 'https://example.com' - const { stats } = await getHTML(url, { getBrowserless }) + const { stats } = await getHTML(url, { + getBrowserless: () => getBrowserContext(t) + }) t.is(stats.mode, 'prerender') }) test('`{ prerender: false }`', async t => { const url = 'https://example.com' - const { stats } = await getHTML(url, { prerender: false, getBrowserless }) + const { stats } = await getHTML(url, { + prerender: false, + getBrowserless: () => getBrowserContext(t) + }) t.is(stats.mode, 'fetch') }) test("`{ prerender: 'auto' }`", async t => { const url = 'https://google.com' const { stats } = await getHTML(url, { - getBrowserless, + getBrowserless: () => getBrowserContext(t), puppeteerOpts: { adblock: false } }) t.is(stats.mode, 'fetch') @@ -33,7 +36,7 @@ test.skip('prerender error fallback into fetch mode', async t => { 'https://www.sportsnet.ca/hockey/nhl/leafs-john-tavares-return-new-york-hope-positive/' const { stats, html } = await getHTML(url, { prerender: true, - getBrowserless, + getBrowserless: () => getBrowserContext(t), puppeteerOpts: { adblock: false } }) t.true(!!html) diff --git a/test/pdf.js b/test/pdf.js index d64bf6e..12dd331 100644 --- a/test/pdf.js +++ b/test/pdf.js @@ -1,13 +1,12 @@ 'use strict' +const { getBrowserContext } = require('@browserless/test') const cheerio = require('cheerio') const test = require('ava') -const { initBrowserless, prettyHtml } = require('./helpers') +const { prettyHtml } = require('./helpers') const getHTML = require('..') -const getBrowserless = initBrowserless(test) - const PDF_OVER_TRESHOLD = 'https://cdn.microlink.io/file-examples/sample.pdf' const PDF_UNDER_TRESHOLD = 'https://pdfobject.com/pdf/sample.pdf' @@ -15,7 +14,7 @@ test('disable if `mutool` is not installed', async t => { const targetUrl = 'https://cdn.microlink.io/file-examples/sample.pdf' const { url, stats, html } = await getHTML(targetUrl, { mutool: false, - getBrowserless + getBrowserless: () => getBrowserContext(t) }) const $ = cheerio.load(html) @@ -29,7 +28,7 @@ test('disable if `mutool` is not installed', async t => { test('turn PDF into HTML markup over the treshold', async t => { const targetUrl = PDF_OVER_TRESHOLD const { url, stats, html } = await getHTML(targetUrl, { - getBrowserless + getBrowserless: () => getBrowserContext(t) }) const $ = cheerio.load(html) @@ -44,7 +43,7 @@ test('turn PDF into HTML markup over the treshold', async t => { test('turn PDF into HTML markup under the treshold', async t => { const targetUrl = PDF_UNDER_TRESHOLD const { url, stats, html } = await getHTML(targetUrl, { - getBrowserless + getBrowserless: () => getBrowserContext(t) }) const $ = cheerio.load(html) t.is(url, targetUrl) diff --git a/test/redirects.js b/test/redirects.js index 57b5cd7..2e6d8b0 100644 --- a/test/redirects.js +++ b/test/redirects.js @@ -1,12 +1,10 @@ 'use strict' +const { getBrowserContext } = require('@browserless/test') const test = require('ava') -const { initBrowserless } = require('./helpers') const getHTML = require('..') -const getBrowserless = initBrowserless(test) - ;[true, false].forEach(prerender => { const mode = prerender ? 'prerender' : 'fetch' @@ -16,7 +14,7 @@ const getBrowserless = initBrowserless(test) const { redirects } = await getHTML(targetUrl, { prerender, - getBrowserless + getBrowserless: () => getBrowserContext(t) }) t.deepEqual(redirects, [ diff --git a/test/url.js b/test/url.js index 89c1a1b..86eab69 100644 --- a/test/url.js +++ b/test/url.js @@ -1,12 +1,11 @@ 'use strict' +const { getBrowserContext } = require('@browserless/test') const test = require('ava') -const { initBrowserless, runServer, prettyHtml } = require('./helpers') +const { runServer, prettyHtml } = require('./helpers') const getHTML = require('..') -const getBrowserless = initBrowserless(test) - ;[false, true].forEach(prerender => { const mode = prerender ? 'prerender' : 'fetch' test(`${mode} » as string`, async t => { @@ -14,7 +13,7 @@ const getBrowserless = initBrowserless(test) res.end('.') ) const { html } = await getHTML(url.toString(), { - getBrowserless, + getBrowserless: () => getBrowserContext(t), prerender, puppeteerOpts: { adblock: false, animations: true } }) @@ -38,7 +37,7 @@ const getBrowserless = initBrowserless(test) res.end('.') ) const { html } = await getHTML(url, { - getBrowserless, + getBrowserless: () => getBrowserContext(t), prerender, puppeteerOpts: { adblock: false, animations: true } })