"Websocket"
- T.C1 WebSocket text/binary frame 被 FakeWebSocketChannel 遮蔽
Flutter app 用 Uint8List 發送 WS 資料走 binary frame,ttyd 期望 text frame 靜默忽略 — FakeWebSocketChannel 的 sink.add 接受 dynamic 不區分 frame type,192 個 test 全過但實機無回應
- 2.1 read pump / write pump 模式
分離 WebSocket 讀取、寫入與心跳
- 6.1 如何新增一個即時訊息 action
修改 client message、路由與 handler
- T.C2 Auth handshake 邏輯缺失被 FakeWebSocketChannel 遮蔽
ttyd 連線後需要發送 auth token JSON frame 完成認證,整個邏輯未實作 — FakeWebSocketChannel 的 ready 立即完成不需認證,test 永遠看到連線成功
- WebSocket 協議測試實作
對真實 ttyd 驗證 frame type 和 auth handshake — 從 T.C1 和 T.C2 的教訓推導出的 protocol integration test 設計
- 2.2 heartbeat、deadline 與連線清理
用 ping/pong 和 deadline 偵測失效連線
- 5.2 WebSocket integration test
驗證 client/server 實際互動
- 2.3 訂閱模型與訊息路由
將 client action 對應到主題訂閱狀態
- 7.3 跨節點 WebSocket、presence 與重連協定
把單一 server 的 WebSocket hub 擴展到多節點推送與連線狀態
- 2.4 慢客戶端與 send buffer 管理
控制推送佇列與記憶體風險
- 192 個測試全過、實機全壞:Mock 遮蔽真實行為的三層測試策略
unit test 全綠、實機部署後功能整片壞掉。mock-only 策略的結構盲區(text vs binary frame、缺 auth handshake、ANSI 多樣性被 FakeWebSocketChannel 遮蔽),以及分層測試各抓什麼、各遮蔽什麼。