diff --git a/jest-puppeteer.config.js b/jest-puppeteer.config.js index adfdceba..91117927 100644 --- a/jest-puppeteer.config.js +++ b/jest-puppeteer.config.js @@ -9,6 +9,7 @@ process.env.TEST_SERVER_PORT = port; */ const jestPuppeteerConfig = { launch: { + browser: process.env.BROWSER || "chrome", headless: "new", args: ["--no-sandbox"], }, diff --git a/package.json b/package.json index 208fb1d3..ab78a00e 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "lint": "prettier --check . && eslint .", "test": "jest --runInBand", "test:incognito": "cross-env INCOGNITO=true jest --runInBand", + "test:firefox": "cross-env BROWSER=firefox jest --runInBand", "release": "npm run build && lerna publish --conventional-commits && npx conventional-github-releaser -p angular", "release-canary": "npm run build && lerna publish --canary --dist-tag canary" }, diff --git a/packages/jest-environment-puppeteer/src/browsers.ts b/packages/jest-environment-puppeteer/src/browsers.ts index a6c50f81..f691ea85 100644 --- a/packages/jest-environment-puppeteer/src/browsers.ts +++ b/packages/jest-environment-puppeteer/src/browsers.ts @@ -100,6 +100,7 @@ export const startBrowsers = async ({ ); const wsEndpoints = browsers.map((browser) => browser.wsEndpoint()); saveWsEndpoints(wsEndpoints); + browsers.forEach((browser) => browser.disconnect()); return browsers; }; @@ -107,9 +108,33 @@ export const closeBrowsers = async ( config: JestPuppeteerConfig, browsers: Browser[], ) => { - await Promise.all( - browsers.map(async (browser) => closeBrowser(config, browser)), - ); + if (config.connect) { + await Promise.all( + browsers.map(async (browser) => closeBrowser(config, browser)), + ); + } + + const closeRequests: Promise[] = []; + const puppeteer = getPuppeteer(); + const wsEndpoints = readWsEndpoints(); + while (wsEndpoints.length) { + const wsEndpoint = wsEndpoints.pop()!; + closeRequests.push( + puppeteer + .connect({ + ...(config.launch?.browser === "firefox" && { + protocol: "webDriverBiDi", + }), + ...config.connect, + ...config.launch, + browserURL: undefined, + browserWSEndpoint: wsEndpoint, + }) + .then((browser) => browser.close()), + ); + } + await Promise.all(closeRequests); + saveWsEndpoints([]); }; const getWorkerWsEndpoint = (): string => { @@ -128,6 +153,7 @@ export const connectBrowserFromWorker = async ( const wsEndpoint = getWorkerWsEndpoint(); const puppeteer = getPuppeteer(); return puppeteer.connect({ + ...(config.launch?.browser === "firefox" && { protocol: "webDriverBiDi" }), ...config.connect, ...config.launch, browserURL: undefined,