-
Notifications
You must be signed in to change notification settings - Fork 0
/
smoke.mjs
51 lines (47 loc) · 1.42 KB
/
smoke.mjs
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
import puppeteer from 'puppeteer';
import { execa } from 'execa';
import process from 'process';
function waitForOutput(serverProcess, stringToMatch) {
return new Promise((resolve, reject) => {
let output = '';
let listener = (data) => {
output += data.toString();
if (output.includes(stringToMatch)) {
serverProcess.stdout.removeListener('data', listener);
serverProcess.stderr.removeListener('data', listener);
resolve(output);
}
};
serverProcess.stdout.on('data', listener);
serverProcess.stderr.on('data', listener);
serverProcess.on('exit', (code) => {
if (code > 0) reject(new Error(output));
});
});
}
async function startEmber() {
let port = '4321';
let serverProcess = execa('ember', ['s', '-prod', '--port', port]);
await waitForOutput(serverProcess, 'Build successful');
return { serverProcess, port };
}
async function test(startServerFn, testSelector) {
let server;
try {
let { serverProcess, port } = await startServerFn();
server = serverProcess;
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(`http://localhost:${port}`);
await page.waitForSelector(testSelector, { timeout: 5000 });
await browser.close();
} finally {
server?.cancel();
}
}
try {
test(startEmber, '.ember-application');
} catch (error) {
console.error(error);
process.exitCode = 1;
}