chore(e2e): make stability (#2751)
This commit is contained in:
parent
68009d3d32
commit
70b61c60c0
@ -94,7 +94,8 @@
|
||||
"ts-jest": "^29.1.1",
|
||||
"typescript": "5.1.3",
|
||||
"vite": "^4.4.9",
|
||||
"vitest": "^0.34.3"
|
||||
"vitest": "^0.34.3",
|
||||
"axios": "^0.26.1"
|
||||
},
|
||||
"volta": {
|
||||
"node": "18.14.2",
|
||||
|
@ -20,19 +20,13 @@ const runCodegenSync = () => {
|
||||
};
|
||||
|
||||
const run = async () => {
|
||||
const { kill } = await runNocoBase();
|
||||
const { kill, awaitForNocoBase } = await runNocoBase();
|
||||
|
||||
await awaitForNocoBase();
|
||||
|
||||
if (kill) {
|
||||
// 等待服务成功启动
|
||||
setTimeout(() => {
|
||||
console.log('Starting codegen...');
|
||||
runCodegenSync();
|
||||
kill?.('SIGKILL');
|
||||
}, 5000);
|
||||
} else {
|
||||
console.log('Starting codegen...');
|
||||
runCodegenSync();
|
||||
}
|
||||
};
|
||||
|
||||
void run();
|
||||
run();
|
||||
|
@ -1,3 +1,3 @@
|
||||
import { runNocoBase } from './utils';
|
||||
|
||||
void runNocoBase();
|
||||
runNocoBase();
|
||||
|
@ -1,21 +1,15 @@
|
||||
import { runCommand, runNocoBase } from './utils';
|
||||
|
||||
const run = async () => {
|
||||
const { kill } = await runNocoBase({
|
||||
const { kill, awaitForNocoBase } = await runNocoBase({
|
||||
stdio: 'ignore', // 不输出服务的日志,避免干扰测试的日志
|
||||
});
|
||||
|
||||
if (kill) {
|
||||
// 等待服务成功启动
|
||||
setTimeout(() => {
|
||||
await awaitForNocoBase();
|
||||
|
||||
console.log('Start running tests...');
|
||||
void runCommand('npx', ['playwright', 'test', ...process.argv.slice(2)]);
|
||||
runCommand('npx', ['playwright', 'test', ...process.argv.slice(2)]);
|
||||
kill?.('SIGKILL');
|
||||
}, 5000);
|
||||
} else {
|
||||
console.log('Start running tests...');
|
||||
void runCommand('npx', ['playwright', 'test', ...process.argv.slice(2)]);
|
||||
}
|
||||
};
|
||||
|
||||
void run();
|
||||
run();
|
||||
|
@ -1,3 +1,4 @@
|
||||
import axios from 'axios';
|
||||
import dotenv from 'dotenv';
|
||||
import type { CommonOptions } from 'execa';
|
||||
import execa from 'execa';
|
||||
@ -40,6 +41,57 @@ function checkPort(port) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查服务是否启动成功
|
||||
*/
|
||||
const checkServer = async (duration = 1000) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const timer = setInterval(async () => {
|
||||
if (!(await checkPort(process.env.APP_PORT))) {
|
||||
return;
|
||||
}
|
||||
|
||||
axios
|
||||
.get(`http://localhost:${process.env.APP_PORT}/api/__health_check`)
|
||||
.then((response) => {
|
||||
if (response.status === 200) {
|
||||
clearInterval(timer);
|
||||
resolve(true);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
clearInterval(timer);
|
||||
console.error('Request error:', error);
|
||||
reject(error);
|
||||
});
|
||||
}, duration);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 检查 UI 是否启动成功
|
||||
* @param duration
|
||||
*/
|
||||
const checkUI = async (duration = 1000) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const timer = setInterval(async () => {
|
||||
axios
|
||||
.get(`http://localhost:${process.env.APP_PORT}/__umi/api/bundle-status`)
|
||||
.then((response) => {
|
||||
if (response.data.bundleStatus.done) {
|
||||
clearInterval(timer);
|
||||
resolve(true);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
clearInterval(timer);
|
||||
console.error('Request error:', error);
|
||||
reject(error);
|
||||
});
|
||||
}, duration);
|
||||
});
|
||||
};
|
||||
|
||||
export const runNocoBase = async (options?: CommonOptions<any>) => {
|
||||
// 用于存放 playwright 自动生成的相关的文件
|
||||
if (!fs.existsSync('playwright')) {
|
||||
@ -57,25 +109,33 @@ export const runNocoBase = async (options?: CommonOptions<any>) => {
|
||||
|
||||
dotenv.config({ path: path.resolve(process.cwd(), '.env.e2e') });
|
||||
|
||||
const awaitForNocoBase = async () => {
|
||||
console.log('check server...');
|
||||
await checkServer();
|
||||
console.log('server is ready, check UI...');
|
||||
await checkUI();
|
||||
console.log('UI is ready.');
|
||||
};
|
||||
|
||||
if (process.env.CI) {
|
||||
console.log('yarn nocobase install');
|
||||
await runCommand('yarn', ['nocobase', 'install'], options);
|
||||
console.log(`yarn start -d -p ${process.env.APP_PORT}`);
|
||||
await runCommand('yarn', ['start', '-d', `-p ${process.env.APP_PORT}`], options);
|
||||
return {};
|
||||
}
|
||||
|
||||
if (await checkPort(process.env.APP_PORT)) {
|
||||
console.log('Server is running, skip starting server.');
|
||||
return {};
|
||||
return { awaitForNocoBase };
|
||||
}
|
||||
|
||||
// 加上 -f 会清空数据库
|
||||
console.log('yarn nocobase install -f');
|
||||
await runCommand('yarn', ['nocobase', 'install', '-f'], options);
|
||||
|
||||
if (await checkPort(process.env.APP_PORT)) {
|
||||
console.log('Server is running, skip starting server.');
|
||||
return { awaitForNocoBase };
|
||||
}
|
||||
|
||||
console.log('starting server...');
|
||||
const { cancel, kill } = runCommand('yarn', ['dev', `-p ${process.env.APP_PORT}`, ...process.argv.slice(2)], options);
|
||||
|
||||
return { cancel, kill };
|
||||
return { cancel, kill, awaitForNocoBase };
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user