ice/tests/utils/start.ts

60 lines
1.5 KiB
TypeScript
Raw Normal View History

import * as path from 'path';
import type { Server } from 'http';
import { fileURLToPath } from 'url';
import getPort from 'get-port';
import createService from '../../packages/ice/src/createService';
import type { Page } from './browser';
import Browser from './browser';
// @ts-ignore
const __dirname = path.dirname(fileURLToPath(import.meta.url));
2022-01-27 14:32:38 +08:00
interface SetupBrowser {
(options: { port: number; defaultPath?: string; server: Server }): Promise<ReturnValue>;
2022-01-27 14:32:38 +08:00
}
2022-11-15 10:37:30 +08:00
interface ReturnValue {
page: Page;
2022-01-27 14:32:38 +08:00
browser: Browser;
}
// get builtIn plugins
export const startFixture = async function (example: string, commandArgs?: Record<string, any>) {
2022-01-27 14:32:38 +08:00
const port = await getPort();
const rootDir = path.join(__dirname, `../../examples/${example}`);
process.env.DISABLE_FS_CACHE = 'true';
const service = await createService({ rootDir,
command: 'start',
commandArgs: {
host: '0.0.0.0',
port,
open: false,
...commandArgs,
} });
2022-03-22 11:31:54 +08:00
2022-03-22 11:42:45 +08:00
// @ts-ignore
const { compiler, devServer } = await service.run();
2022-03-23 14:34:32 +08:00
// wait generate assets manifest
2022-03-22 11:31:54 +08:00
await new Promise((resolve) => {
compiler.hooks.done.tap('done', () => {
2022-03-22 11:31:54 +08:00
resolve(true);
});
2022-03-22 11:31:54 +08:00
});
2022-01-27 14:32:38 +08:00
return {
port,
devServer,
2022-01-27 14:32:38 +08:00
};
};
export const setupStartBrowser: SetupBrowser = async (options) => {
const { port, server, defaultPath = '/' } = options;
2022-01-27 14:32:38 +08:00
const browser = new Browser({ server });
await browser.start();
const page = await browser.page(`http://127.0.0.1:${port}`, defaultPath);
2022-01-27 14:32:38 +08:00
return {
browser,
page,
};
};