召喚系統測試基準
召喚系統測試基準
建立日期
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
重構目標
保持上述所有功能不變,但改善代碼結構:
- 提取狀態機(SummonStateMachine)
- 提取動畫控制器(SummonAnimationController)
- 簡化核心邏輯(performSummon)
- 消除 setTimeout 地獄
驗證方法
重構後必須手動測試所有上述場景,確保行為完全一致。