blob: e7304b7446ab07c0f759809c9a3f6a1bc39d22f8 [file] [log] [blame]
import { launchBrowser, startDemoPageServer, TestBed } from '../../../puppeteer-tests/util';
import * as path from 'path';
import puppeteer from 'puppeteer';
let browser: puppeteer.Browser;
let testBed: Partial<TestBed>;
// Once per mocha invocation, loadGoldWebpack will compile all the demo pages and launch a
// puppeteer browser window to run the tests. On all subsequent calls, it will return essentially
// a cached handle to that invocation.
export async function loadGoldWebpack() {
if (testBed) {
return testBed as TestBed;
}
const newTestBed: Partial<TestBed> = {};
const pathToWebpackConfigTs = path.join(__dirname, '..', '..', 'webpack.config.ts');
let baseUrl;
({ baseUrl } = await startDemoPageServer(pathToWebpackConfigTs));
newTestBed.baseUrl = baseUrl;
browser = await launchBrowser();
testBed = newTestBed;
setBeforeAfterHooks();
return testBed as TestBed;
}
// This sets up some handy helpers to load a new page and shut it down w/o having to expose
// the puppeteer.Browser object to the callers.
function setBeforeAfterHooks() {
beforeEach(async () => {
testBed.page = await browser.newPage(); // Make page available to tests.
// Tell demo pages this is a Puppeteer test. Demo pages should not fake RPC
// latency, render animations or exhibit any other non-deterministic
// behavior that could result in differences in the screenshots uploaded to
// Gold.
await testBed.page.setCookie({
url: testBed.baseUrl,
name: 'puppeteer',
value: 'true'
});
});
afterEach(async () => {
await testBed.page!.close();
});
}