二七王:解散/重连空守卫用例改为 try/catch,避免回归时整个文件崩溃

复检本会话修复项时发现:`解散·牌桌尚未创建 → 返回 null` 这两条用例是直接调
get_disbandRoom 的。守卫一旦被去掉,被测函数当场抛异常,未捕获时 test_endgame
在此中断,后面的「出牌入参顺序无关性」等断言全不执行——看到的是崩溃而不是
某条断言转红,定位与信号都差。改用 noThrow 包一层,异常转成可读的断言失败。

顺带补 get_deskinfo 的同名守卫用例(平台在开战前也可能回调重连)。两个守卫
都做了变异检验:分别去掉后对应断言干净转红,且文件后续断言照常执行。

全套单测 519 → 520 项全绿。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-23 14:13:20 +08:00
co-authored by Claude Opus 5
parent 9d0675fce8
commit 49ee068c5c
+8 -3
View File
@@ -93,10 +93,15 @@ const EXPORT = require('../class.export.js').new();
const dsmsg = EXPORT.get_disbandRoom(ds.ctx.o_room); const dsmsg = EXPORT.get_disbandRoom(ds.ctx.o_room);
t.eq('§12.2 解散:不结算子数、result=3', [dsmsg.data.aset.multiple, dsmsg.data.aset.seatlist.map(p => p.grade), ds.pj.result], [0, [0, 0, 0], 3]); t.eq('§12.2 解散:不结算子数、result=3', [dsmsg.data.aset.multiple, dsmsg.data.aset.seatlist.map(p => p.grade), ds.pj.result], [0, [0, 0, 0], 3]);
// 平台在 makewar 后立刻置 battlestate=1,而首局是延迟 1 秒创建的:这段窗口内解散必须返回 null, // 平台在 makewar 后立刻置 battlestate=1,而首局是延迟 1 秒创建的:这段窗口内解散必须返回 null,
// 而不是让 curr_paiju() 的 undefined 解引用抛异常打断平台的整条解散链路 // 而不是让 curr_paiju() 的 undefined 解引用抛异常打断平台的整条解散链路。
// 这里必须 try/catch:守卫一旦被去掉,被测函数会直接抛异常,未捕获时整个文件在此中断,
// 后面的断言全不执行——看到的是崩溃而不是某条断言转红(实测过)。
const noThrow = fn => { try { return fn(); } catch (e) { return '抛异常: ' + e.message; } };
t.eq('解散·牌局尚未创建 → 返回 null 不抛异常', t.eq('解散·牌局尚未创建 → 返回 null 不抛异常',
EXPORT.get_disbandRoom({ o_desk: { method: { curr_paiju: () => undefined } } }), null); noThrow(() => EXPORT.get_disbandRoom({ o_desk: { method: { curr_paiju: () => undefined } } })), null);
t.eq('解散·牌桌尚未创建 → 返回 null 不抛异常', EXPORT.get_disbandRoom({}), null); t.eq('解散·牌桌尚未创建 → 返回 null 不抛异常', noThrow(() => EXPORT.get_disbandRoom({})), null);
// get_deskinfo 有同一个 o_desk 守卫(平台在开战前也可能回调),一并钉住
t.eq('重连·牌桌尚未创建 → 返回 null 不抛异常', noThrow(() => EXPORT.get_deskinfo({}, 0)), null);
// ============ 出牌入参顺序无关性(端到端)============ // ============ 出牌入参顺序无关性(端到端)============
// 同一手完全合法的跟牌,仅客户端提交的数组顺序不同,本轮胜者/捡分/扣底/结算判定必须完全一致。 // 同一手完全合法的跟牌,仅客户端提交的数组顺序不同,本轮胜者/捡分/扣底/结算判定必须完全一致。