This repository has been archived by the owner on Sep 9, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 270
/
getResultFromBrowser.js
74 lines (62 loc) · 1.89 KB
/
getResultFromBrowser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import path from 'path';
import getPort from 'get-port';
import express from 'express';
import puppeteer from 'puppeteer';
export default async function getResultFromBrowser(stats) {
const assets = Object.entries(stats.compilation.assets);
const app = express();
const port = await getPort();
const server = app.listen(port);
app.use(
'/public-path-static',
express.static(stats.compilation.outputOptions.path)
);
app.use(
'/public-path-static-other',
express.static(stats.compilation.outputOptions.path)
);
for (const asset of assets) {
let [route] = asset;
[route] = route.split('?');
const existsAt = path.resolve(stats.compilation.outputOptions.path, route);
if (route === 'index.html') {
app.get('/', (req, res) => {
res.sendFile(existsAt);
});
} else {
app.get(`/${route}`, (req, res) => {
res.sendFile(existsAt);
});
}
}
const browser = await puppeteer.launch();
const page = await browser.newPage();
page
.on('console', (message) =>
// eslint-disable-next-line no-console
console.log(message)
)
.on('pageerror', ({ message }) =>
// eslint-disable-next-line no-console
console.log(message)
)
// .on('response', (response) =>
// // eslint-disable-next-line no-console
// console.log(`${response.status()} ${response.url()}`)
// )
.on('requestfailed', (request) =>
// eslint-disable-next-line no-console
console.log(`${request.failure().errorText} ${request.url()}`)
);
await page.goto(`http://127.0.0.1:${port}/`);
await page.waitForSelector('button', { timeout: 90000 });
await page.click('button');
await page.waitForSelector('#result', { timeout: 90000 });
const addedFromWorkerText = await page.$eval(
'#result',
(el) => el.textContent
);
browser.close();
server.close();
return addedFromWorkerText;
}