journey-02-free-tts.spec.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /**
  2. * 关键旅程 E2E 测试 02: TTS生成→播放
  3. * Journey: 登录 → 输入文本 → 选择音色 → 生成音频 → 播放
  4. */
  5. import { test, expect } from '@playwright/test';
  6. import { apiGet, apiPost, initApiClient, disposeApiClient, setAuthToken } from '../../../helpers/api-client';
  7. const FRONTEND_URL = process.env.FRONTEND_URL || 'http://localhost:5173';
  8. test.describe('关键旅程 02: TTS生成播放', () => {
  9. let phone: string;
  10. let authToken: string;
  11. let audioId: string;
  12. test.beforeAll(async () => {
  13. await initApiClient();
  14. // 创建测试用户
  15. phone = `138${String(Date.now()).slice(-8)}`;
  16. await apiPost('/api/auth/send-code', { phone });
  17. const loginRes = await apiPost('/api/auth/login', { phone, code: '123456' });
  18. authToken = loginRes.data?.token;
  19. setAuthToken(authToken);
  20. });
  21. test.afterAll(async () => {
  22. await disposeApiClient();
  23. });
  24. test('C02-1: 获取音色列表', async () => {
  25. const res = await apiGet('/api/tts/voices');
  26. expect(res.code).toBe(0);
  27. expect(res.data?.voices).toBeDefined();
  28. expect(Array.isArray(res.data.voices)).toBe(true);
  29. expect(res.data.voices.length).toBeGreaterThan(0);
  30. });
  31. test('C02-2: 获取提供商列表', async () => {
  32. const res = await apiGet('/api/tts/providers');
  33. expect(res.code).toBe(0);
  34. });
  35. test('C02-3: 生成TTS音频任务', async () => {
  36. const res = await apiPost('/api/tts/generate', {
  37. text: '这是一段自动化测试文本,用于验证TTS音频生成功能。人工智能正在改变我们的生活方式。',
  38. voiceId: 'Cherry',
  39. voiceParams: { speed: 1.0, pitch: 0, volume: 50 },
  40. });
  41. expect(res.code).toBe(0);
  42. audioId = res.data?.audioId;
  43. expect(audioId).toBeDefined();
  44. });
  45. test('C02-4: 查询音频生成状态', async () => {
  46. if (!audioId) return test.skip();
  47. // 状态接口可能需要等待,实际应该轮询
  48. const res = await apiGet(`/api/tts/status/${audioId}`);
  49. expect([0, 1, 2, 404]).toContain(res.code); // 0=成功, 1=处理中, 2=失败
  50. });
  51. test('C02-5: TTS生成页可正常访问', async ({ page }) => {
  52. await page.goto(`${FRONTEND_URL}/#/pages/create/index`, { waitUntil: 'networkidle', timeout: 30000 });
  53. await page.waitForTimeout(3000);
  54. await expect(page.locator('text=生成音频').first()).toBeVisible();
  55. });
  56. test('C02-6: 播放器页可正常访问', async ({ page }) => {
  57. await page.goto(`${FRONTEND_URL}/#/pages/player/index`, { waitUntil: 'networkidle', timeout: 30000 });
  58. await page.waitForTimeout(3000);
  59. await expect(page.locator('#app')).toBeVisible();
  60. });
  61. });