Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/puppet/test/launchProcess.test.ts
1030 views
1
import Log from '@secret-agent/commons/Logger';
2
import CorePlugins from '@secret-agent/core/lib/CorePlugins';
3
import { IBoundLog } from '@secret-agent/interfaces/ILog';
4
import Core from '@secret-agent/core';
5
import Puppet from '../index';
6
import CustomBrowserEmulator from './_CustomBrowserEmulator';
7
8
const { log } = Log(module);
9
const browserEmulatorId = CustomBrowserEmulator.id;
10
11
describe('launchProcess', () => {
12
beforeAll(async () => {
13
Core.use(CustomBrowserEmulator);
14
});
15
16
it('should reject all promises when browser is closed', async () => {
17
const browserEngine = CustomBrowserEmulator.selectBrowserMeta().browserEngine;
18
const browser = await new Puppet(browserEngine);
19
await browser.start();
20
const plugins = new CorePlugins({ browserEmulatorId }, log as IBoundLog);
21
const page = await (await browser.newContext(plugins, log)).newPage();
22
let error = null;
23
const neverResolves = page.evaluate(`new Promise(r => {})`).catch(e => (error = e));
24
await page.evaluate(`new Promise(f => setTimeout(f, 0))`);
25
await browser.close();
26
await neverResolves;
27
expect(error.message).toContain('Cancel Pending Promise');
28
});
29
30
it('should reject if executable path is invalid', async () => {
31
const browserEngine = CustomBrowserEmulator.selectBrowserMeta().browserEngine;
32
browserEngine.executablePath = 'random-invalid-path';
33
const browser = new Puppet(browserEngine);
34
await expect(browser.start()).rejects.toThrowError('Failed to launch');
35
});
36
37
it('should be callable twice', async () => {
38
const browserEngine = CustomBrowserEmulator.selectBrowserMeta().browserEngine;
39
const browser = await new Puppet(browserEngine);
40
await Promise.all([browser.close(), browser.close()]);
41
await expect(browser.close()).resolves.toBe(undefined);
42
});
43
});
44
45