chore(e2e): make stability (#2751)
This commit is contained in:
parent
68009d3d32
commit
70b61c60c0
@ -94,7 +94,8 @@
|
|||||||
"ts-jest": "^29.1.1",
|
"ts-jest": "^29.1.1",
|
||||||
"typescript": "5.1.3",
|
"typescript": "5.1.3",
|
||||||
"vite": "^4.4.9",
|
"vite": "^4.4.9",
|
||||||
"vitest": "^0.34.3"
|
"vitest": "^0.34.3",
|
||||||
|
"axios": "^0.26.1"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "18.14.2",
|
"node": "18.14.2",
|
||||||
|
@ -20,19 +20,13 @@ const runCodegenSync = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const run = async () => {
|
const run = async () => {
|
||||||
const { kill } = await runNocoBase();
|
const { kill, awaitForNocoBase } = await runNocoBase();
|
||||||
|
|
||||||
|
await awaitForNocoBase();
|
||||||
|
|
||||||
if (kill) {
|
|
||||||
// 等待服务成功启动
|
|
||||||
setTimeout(() => {
|
|
||||||
console.log('Starting codegen...');
|
console.log('Starting codegen...');
|
||||||
runCodegenSync();
|
runCodegenSync();
|
||||||
kill?.('SIGKILL');
|
kill?.('SIGKILL');
|
||||||
}, 5000);
|
|
||||||
} else {
|
|
||||||
console.log('Starting codegen...');
|
|
||||||
runCodegenSync();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void run();
|
run();
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
import { runNocoBase } from './utils';
|
import { runNocoBase } from './utils';
|
||||||
|
|
||||||
void runNocoBase();
|
runNocoBase();
|
||||||
|
@ -1,21 +1,15 @@
|
|||||||
import { runCommand, runNocoBase } from './utils';
|
import { runCommand, runNocoBase } from './utils';
|
||||||
|
|
||||||
const run = async () => {
|
const run = async () => {
|
||||||
const { kill } = await runNocoBase({
|
const { kill, awaitForNocoBase } = await runNocoBase({
|
||||||
stdio: 'ignore', // 不输出服务的日志,避免干扰测试的日志
|
stdio: 'ignore', // 不输出服务的日志,避免干扰测试的日志
|
||||||
});
|
});
|
||||||
|
|
||||||
if (kill) {
|
await awaitForNocoBase();
|
||||||
// 等待服务成功启动
|
|
||||||
setTimeout(() => {
|
|
||||||
console.log('Start running tests...');
|
console.log('Start running tests...');
|
||||||
void runCommand('npx', ['playwright', 'test', ...process.argv.slice(2)]);
|
runCommand('npx', ['playwright', 'test', ...process.argv.slice(2)]);
|
||||||
kill?.('SIGKILL');
|
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 dotenv from 'dotenv';
|
||||||
import type { CommonOptions } from 'execa';
|
import type { CommonOptions } from 'execa';
|
||||||
import execa 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>) => {
|
export const runNocoBase = async (options?: CommonOptions<any>) => {
|
||||||
// 用于存放 playwright 自动生成的相关的文件
|
// 用于存放 playwright 自动生成的相关的文件
|
||||||
if (!fs.existsSync('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') });
|
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) {
|
if (process.env.CI) {
|
||||||
console.log('yarn nocobase install');
|
console.log('yarn nocobase install');
|
||||||
await runCommand('yarn', ['nocobase', 'install'], options);
|
await runCommand('yarn', ['nocobase', 'install'], options);
|
||||||
console.log(`yarn start -d -p ${process.env.APP_PORT}`);
|
console.log(`yarn start -d -p ${process.env.APP_PORT}`);
|
||||||
await runCommand('yarn', ['start', '-d', `-p ${process.env.APP_PORT}`], options);
|
await runCommand('yarn', ['start', '-d', `-p ${process.env.APP_PORT}`], options);
|
||||||
return {};
|
return { awaitForNocoBase };
|
||||||
}
|
|
||||||
|
|
||||||
if (await checkPort(process.env.APP_PORT)) {
|
|
||||||
console.log('Server is running, skip starting server.');
|
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加上 -f 会清空数据库
|
// 加上 -f 会清空数据库
|
||||||
console.log('yarn nocobase install -f');
|
console.log('yarn nocobase install -f');
|
||||||
await runCommand('yarn', ['nocobase', 'install', '-f'], options);
|
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...');
|
console.log('starting server...');
|
||||||
const { cancel, kill } = runCommand('yarn', ['dev', `-p ${process.env.APP_PORT}`, ...process.argv.slice(2)], options);
|
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