From 1fcb5379df29e060982ef20698cc50be0fb4b7e7 Mon Sep 17 00:00:00 2001 From: Rongrong Date: Fri, 17 Jun 2022 21:55:33 +0800 Subject: [PATCH] fix(test): insufficiently robust puppeteer test (#9974) Signed-off-by: Rongrong --- test/utils/puppeteer.js | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/test/utils/puppeteer.js b/test/utils/puppeteer.js index a1b4ab035..8774155ae 100644 --- a/test/utils/puppeteer.js +++ b/test/utils/puppeteer.js @@ -2,14 +2,24 @@ let puppeteer; const wait = require('../../lib/utils/wait'); const cheerio = require('cheerio'); +let browser = null; + afterEach(() => { + if (browser) { + // double insurance to close unclosed browser immediately after each test + // if a test closure fails before it can close the browser, the browser process will probably be unclosed, + // especially when the test unit is run through `npm run jest puppeteer` + browser.close(); + browser = null; + } jest.resetModules(); }); describe('puppeteer', () => { it('puppeteer run', async () => { puppeteer = require('../../lib/utils/puppeteer'); - const browser = await puppeteer(); + browser = await puppeteer(); + const startTime = Date.now(); const page = await browser.newPage(); await page.goto('https://www.google.com', { waitUntil: 'domcontentloaded', @@ -20,12 +30,17 @@ describe('puppeteer', () => { expect(html.length).toBeGreaterThan(0); expect((await browser.process()).signalCode).toBe(null); - await wait(31 * 1000); + const sleepTime = 31 * 1000 - (Date.now() - startTime); // prevent long loading time from failing the test + if (sleepTime > 0) { + await wait(sleepTime); + } expect((await browser.process()).signalCode).toBe('SIGKILL'); - }, 40000); + browser = null; + }, 45000); + it('puppeteer without stealth', async () => { puppeteer = require('../../lib/utils/puppeteer'); - const browser = await puppeteer({ stealth: false }); + browser = await puppeteer({ stealth: false }); const page = await browser.newPage(); await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle0', @@ -34,6 +49,7 @@ describe('puppeteer', () => { const html = await page.evaluate(() => document.body.innerHTML); const $ = cheerio.load(html); browser.close(); + browser = null; const webDriverTest = $('tbody tr').eq(2).find('td').eq(1).text().trim(); const chromeTest = $('tbody tr').eq(4).find('td').eq(1).text().trim(); @@ -42,9 +58,10 @@ describe('puppeteer', () => { expect(['present (failed)', '']).toContain(webDriverTest); expect(['missing (failed)', '']).toContain(chromeTest); }, 10000); + it('puppeteer with stealth', async () => { puppeteer = require('../../lib/utils/puppeteer'); - const browser = await puppeteer({ stealth: true }); + browser = await puppeteer({ stealth: true }); const page = await browser.newPage(); await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle0', @@ -53,6 +70,8 @@ describe('puppeteer', () => { const html = await page.evaluate(() => document.body.innerHTML); const $ = cheerio.load(html); browser.close(); + browser = null; + const webDriverTest = $('tbody tr').eq(2).find('td').eq(1).text().trim(); const chromeTest = $('tbody tr').eq(4).find('td').eq(1).text().trim(); // these are something we really care about