2022-03-01 10:40:46 +08:00
|
|
|
import path from 'path';
|
|
|
|
import getPort from 'get-port';
|
|
|
|
import Browser, { Page } from './browser';
|
2022-01-27 14:32:38 +08:00
|
|
|
import { Server } from 'http';
|
2022-03-31 15:12:33 +08:00
|
|
|
import createService from '../../packages/ice/src/createService';
|
2022-03-01 10:40:46 +08:00
|
|
|
import { fileURLToPath } from 'url';
|
|
|
|
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
2022-01-27 14:32:38 +08:00
|
|
|
|
|
|
|
interface ISetupBrowser {
|
|
|
|
(options: { port: number; defaultPath?: string; server: Server; }): Promise<IReturn>;
|
|
|
|
}
|
|
|
|
|
|
|
|
interface IReturn {
|
|
|
|
page: IPage;
|
|
|
|
browser: Browser;
|
|
|
|
}
|
|
|
|
|
|
|
|
// get builtIn plugins
|
|
|
|
export const startFixture = async function (example: string) {
|
|
|
|
const port = await getPort();
|
|
|
|
const rootDir = path.join(__dirname, `../../examples/${example}`);
|
|
|
|
const processCwdSpy = jest.spyOn(process, 'cwd');
|
|
|
|
processCwdSpy.mockReturnValue(rootDir);
|
|
|
|
process.env.DISABLE_FS_CACHE = 'true';
|
2022-03-08 16:23:43 +08:00
|
|
|
const service = await createService({ rootDir, command: 'start', commandArgs: {
|
2022-04-14 20:49:57 +08:00
|
|
|
host: '0.0.0.0',
|
2022-03-08 16:23:43 +08:00
|
|
|
port,
|
2022-04-14 20:20:06 +08:00
|
|
|
open: false,
|
2022-04-01 10:43:34 +08:00
|
|
|
}});
|
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',() => {
|
|
|
|
resolve(true);
|
|
|
|
})
|
|
|
|
});
|
2022-01-27 14:32:38 +08:00
|
|
|
|
2022-03-25 18:02:56 +08:00
|
|
|
// @ts-ignore
|
|
|
|
const { compiler, devServer } = await service.run();
|
|
|
|
// wait generate assets manifest
|
|
|
|
await new Promise((resolve) => {
|
|
|
|
compiler.hooks.done.tap('done',() => {
|
|
|
|
resolve(true);
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
2022-01-27 14:32:38 +08:00
|
|
|
const devServer = await start({
|
|
|
|
args: {
|
|
|
|
config: path.join(rootDir, 'build.json'),
|
|
|
|
port,
|
|
|
|
disableOpen: true
|
|
|
|
},
|
|
|
|
rootDir,
|
|
|
|
getBuiltInPlugins: (userConfig) => {
|
|
|
|
return getBuiltInPlugins(userConfig).concat(require.resolve('./test-plugin'));
|
|
|
|
},
|
|
|
|
}) as any as Server;
|
|
|
|
return {
|
|
|
|
port,
|
|
|
|
devServer
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
export const setupStartBrowser: ISetupBrowser = async (options) => {
|
|
|
|
const { port, server, defaultPath = '' } = options;
|
|
|
|
const browser = new Browser({ server });
|
|
|
|
await browser.start();
|
|
|
|
const page = await browser.page(`http://127.0.0.1:${port}/${defaultPath}`);
|
|
|
|
return {
|
|
|
|
browser,
|
|
|
|
page,
|
|
|
|
};
|
|
|
|
};
|