召喚系統測試基準

召喚系統測試基準

建立日期

2025-10-09

測試目的

記錄重構前的召喚系統行為作為基準,確保重構後功能完全一致。

測試環境

  • URL: http://localhost:4000/#party
  • 初始金幣: 80,008
  • 召喚費用: 10,000

核心功能測試清單

1. 正常召喚流程

  • 點擊召喚門後金幣扣除 10,000
  • 召喚門圖片隱藏(opacity: 0)
  • 影片開始播放(如果 readyState >= 3)
  • 粒子效果在第 2 秒出現
  • 光暈效果在第 3-5 秒依序出現
  • 第 6 秒顯示結果 modal
  • Modal 顯示正確的角色資訊(名稱、星級、技能)
  • 召喚門恢復正常狀態

2. 影片載入失敗場景

  • 如果 video.readyState < 3,跳過動畫直接顯示結果
  • 金幣依然正確扣除
  • 結果 modal 正常顯示

3. 動畫超時保護

  • 如果動畫超過 7 秒未完成,強制顯示結果
  • 不會卡死在動畫狀態

4. 重複召喚防護

  • 召喚進行中點擊召喚門應無反應
  • Console 顯示「召喚進行中,請稍候…」
  • 不會扣除額外金幣

5. 金幣不足場景

  • 金幣 < 10,000 時點擊顯示錯誤訊息
  • 不觸發召喚流程
  • 金幣數量不變

6. 重複角色處理

  • 重複角色不增加 count
  • 轉換為金幣獎勵(1星200, 2星1000, 3星3000, 4星5000, 5星20000)
  • Modal 顯示「獲得金幣」標題
  • 顯示金幣圖示和金額

7. 圖鑑更新

  • 新角色加入圖鑑
  • 收集進度更新
  • 收集百分比正確計算
  • 星級統計正確顯示

8. Modal 關閉

  • 點擊 X 或背景關閉 modal
  • Modal className 重置為 ‘summon-result-modal’
  • 不會導致堆疊溢位

已知問題(修復前)

  • ❌ 影片未檢查 readyState,可能不播放
  • ❌ 無超時保護,可能卡死
  • ❌ debugModalClassChanges 導致堆疊溢位
  • ❌ 無狀態鎖,可重複觸發

修復後狀態

  • ✅ 加入 readyState < 3 檢查
  • ✅ 加入 7 秒超時保護
  • ✅ 加入 isSummoning 狀態鎖
  • ✅ 移除 debugModalClassChanges
  • ✅ video 改為 preload=”auto” muted

重構目標

保持上述所有功能不變,但改善代碼結構:

  1. 提取狀態機(SummonStateMachine)
  2. 提取動畫控制器(SummonAnimationController)
  3. 簡化核心邏輯(performSummon)
  4. 消除 setTimeout 地獄

驗證方法

重構後必須手動測試所有上述場景,確保行為完全一致。