diff --git a/README.md b/README.md index 8326448..62c8408 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,8 @@ $ npm i --save-dev puppeteer@^19.11.1 $ TEST_BROWSER_DRIVER=puppeteer meteor test --once --driver-package ``` +Use `PUPPETEER_WAIT_TIMEOUT` env to set wait timeout in milliseconds after which the driver will forcefully stop running the tests (default is 30 minutes). + ### Playwright `playwright@^1.33.0` is the latest version with Node 14 compatibility (Meteor 2.x is set to use Node.js version 14.x by default). diff --git a/browser/puppeteer.js b/browser/puppeteer.js index 3ad36e0..b4d8f5a 100644 --- a/browser/puppeteer.js +++ b/browser/puppeteer.js @@ -9,6 +9,15 @@ */ const util = require('util'); +// 30 minutes by default +const WAIT_TIMEOUT = process.env.PUPPETEER_WAIT_TIMEOUT + ? Number.parseInt(process.env.PUPPETEER_WAIT_TIMEOUT, 10) + : 30 * 60 * 1000; + +if (Number.isNaN(WAIT_TIMEOUT)) { + throw new Error(`Invalid PUPPETEER_WAIT_TIMEOUT value: ${process.env.PUPPETEER_WAIT_TIMEOUT}`); +} + export default function startPuppeteer({ stdout, stderr, @@ -63,7 +72,7 @@ export default function startPuppeteer({ await page.goto(process.env.ROOT_URL); - await page.waitForFunction(() => window.testsDone, { timeout: 0 }); + await page.waitForFunction(() => window.testsDone, { timeout: WAIT_TIMEOUT }); const testFailures = await page.evaluate('window.testFailures'); await consolePromise; @@ -73,5 +82,8 @@ export default function startPuppeteer({ done(testFailures); } - runTests(); + runTests().catch(err => { + stderr(err); + done(); + }); }