ice/tests/utils/start.ts

77 lines
2.0 KiB
TypeScript
Raw Normal View History

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';
import createService from '../../packages/ice/src/createService';
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';
const service = await createService({ rootDir, command: 'start', commandArgs: {
host: '0.0.0.0',
port,
open: false,
}});
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
feat: Document (#34) * feat: match route * feat: generate route manifest * feat: document component * refactor: remove routes json * feat: route data * refactor: render async scripts * feat: manifest * fix: pass path info * fix: block css * fix: hijackwebpack * feat: get assets from manifest * fix: ts error * feat: mege page assets and config * fix: file suffix * fix: file suffix * fix: await generate html * refactor: return the last page config * fix: pageconfig may be null * fix: page config type * chore: log test result * chore: log test result * chore: log test result * chore: log test result * chore: enable after compile * fix: await compile * fix: await compile * feat: assets manifest * fix: lint * fix: enable build test * fix: enable build test * fix: type * chore: add comment * fix: conflict * fix: conflict * refactor: use first compile tag * refactor: root -> main * refactor: server context to request context * fix: defer attr * refactor: load route data * refactor: fn name * refactor: rename to client entry * refactor: rename route wapper to page wapper * fix: aplus blocks the puppeteer load page * fix: remove plugin not needed * chore: add todo * fix: update lock file * feat: rewrite matchRoutes function * fix: await async hooks (#41) * chore: add todo * refactor: route manifest * chore: update lock file * fix: get route str * refactor: set default output * refactor: set default output * refactor: get extname * refactor: rename plugin folder * fix: file path * fix: support tsx Co-authored-by: ClarkXia <xiawenwu41@gmail.com> Co-authored-by: luhc228 <luhengchang228@gmail.com>
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,
};
};