jest-environment-puppeteer-jsdom
Version:
Puppeteer environment for Jest.
79 lines (63 loc) • 2.4 kB
JavaScript
;
exports.__esModule = true;
exports.setup = setup;
exports.teardown = teardown;
var _jestDevServer = require("jest-dev-server");
var _chalk = _interopRequireDefault(require("chalk"));
var _readConfig = require("./readConfig");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable no-console */
let browsers = [];
let didAlreadyRunInWatchMode = false;
async function openBrowser(puppeteer, config) {
if (config.connect) {
return puppeteer.connect(config.connect);
}
return puppeteer.launch(config.launch);
}
async function setup(jestConfig = {}) {
const config = await (0, _readConfig.readConfig)();
const puppeteer = (0, _readConfig.getPuppeteer)();
const browsersCount = config.browserPerWorker && !config.connect ? jestConfig.maxWorkers : 1;
process.env.BROWSERS_COUNT = browsersCount;
browsers = await Promise.all(Array.from({
length: browsersCount
}).map(() => openBrowser(puppeteer, config)));
const wsEndpoints = browsers.map(browser => browser.wsEndpoint());
process.env.PUPPETEER_WS_ENDPOINTS = JSON.stringify(wsEndpoints); // If we are in watch mode, - only setupServer() once.
if (jestConfig.watch || jestConfig.watchAll) {
if (didAlreadyRunInWatchMode) return;
didAlreadyRunInWatchMode = true;
}
if (config.server) {
try {
await (0, _jestDevServer.setup)(config.server);
} catch (error) {
if (error.code === _jestDevServer.ERROR_TIMEOUT) {
console.log('');
console.error(_chalk.default.red(error.message));
console.error(_chalk.default.blue(`\n☝️ You can set "server.launchTimeout" in jest-puppeteer.config.js`));
process.exit(1);
}
if (error.code === _jestDevServer.ERROR_NO_COMMAND) {
console.log('');
console.error(_chalk.default.red(error.message));
console.error(_chalk.default.blue(`\n☝️ You must set "server.command" in jest-puppeteer.config.js`));
process.exit(1);
}
throw error;
}
}
}
async function teardown(jestConfig = {}) {
const config = await (0, _readConfig.readConfig)();
await Promise.all(browsers.map(browser => {
if (config.connect) {
return browser.disconnect();
}
return browser.close();
}));
if (!jestConfig.watch && !jestConfig.watchAll) {
await (0, _jestDevServer.teardown)();
}
}