global-setup.ts 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /**
  2. * 全局测试初始化
  3. * 在所有测试运行前执行,验证服务健康、准备测试数据
  4. */
  5. import { initApiClient, apiGet, apiPost, setAuthToken } from './helpers/api-client';
  6. async function globalSetup() {
  7. console.log('\n========================================');
  8. console.log(' 自动化测试 - 全局初始化');
  9. console.log('========================================\n');
  10. // 1. 初始化 API 客户端(默认走 IPv4,规避 Node.js 22 的 IPv6 解析)
  11. await initApiClient();
  12. // 2. 健康检查
  13. console.log('[setup] 检查服务健康状态...');
  14. try {
  15. const health = await apiGet('/health');
  16. if (health.code === 0) {
  17. console.log(' ✅ 后端服务正常');
  18. } else {
  19. console.warn(' ⚠ 后端服务状态异常:', health);
  20. }
  21. } catch (e: any) {
  22. console.error(' ❌ 后端服务不可达!', e.message);
  23. throw new Error(`后端服务不可达: ${e.message}`);
  24. }
  25. // 3. 检查数据库连接
  26. console.log('[setup] 检查数据库连接...');
  27. try {
  28. const db = await apiGet('/api/tts/test-db');
  29. if (db.code === 0) {
  30. console.log(' ✅ 数据库连接正常');
  31. } else {
  32. console.warn(' ⚠ 数据库连接异常:', db);
  33. }
  34. } catch (e: any) {
  35. console.warn(' ⚠ 数据库检查失败:', e.message);
  36. }
  37. // 4. 创建测试用户并获取 token
  38. console.log('[setup] 创建测试用户...');
  39. try {
  40. // 使用固定测试手机号
  41. const codeRes = await apiPost('/api/auth/send-code', { phone: '13800000001' });
  42. const code = codeRes.data?.code || '123456';
  43. const loginRes = await apiPost('/api/auth/login', { phone: '13800000001', code });
  44. const token = loginRes.data?.token;
  45. if (token) {
  46. setAuthToken(token);
  47. }
  48. console.log(` ✅ 测试用户就绪 (token: ${token ? '已获取' : '未获取'})`);
  49. } catch (e: any) {
  50. console.warn(' ⚠ 测试用户创建失败:', e.message);
  51. }
  52. // 5. 检查关键 API 列表是否可用
  53. console.log('[setup] 验证核心 API 端点...');
  54. const checks = [
  55. { name: '音色列表', path: '/api/tts/voices' },
  56. { name: '音频列表', path: '/api/player/audio/list' },
  57. { name: '书籍列表', path: '/api/book-generator/langgraph/books' },
  58. { name: '专辑列表', path: '/api/book-generator/albums' },
  59. { name: '历史记录', path: '/api/history' },
  60. ];
  61. for (const check of checks) {
  62. try {
  63. const res = await apiGet(check.path);
  64. if (res.code === 0) {
  65. console.log(` ✅ ${check.name}`);
  66. } else {
  67. console.warn(` ⚠ ${check.name}: code=${res.code}`);
  68. }
  69. } catch (e: any) {
  70. console.warn(` ⚠ ${check.name}: ${e.message}`);
  71. }
  72. }
  73. console.log('\n========================================');
  74. console.log(' 全局初始化完成,开始运行测试...');
  75. console.log('========================================\n');
  76. }
  77. export default globalSetup;