二七王:解散/重连空守卫用例改为 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:
@@ -93,10 +93,15 @@ const EXPORT = require('../class.export.js').new();
|
||||
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]);
|
||||
// 平台在 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 不抛异常',
|
||||
EXPORT.get_disbandRoom({ o_desk: { method: { curr_paiju: () => undefined } } }), null);
|
||||
t.eq('解散·牌桌尚未创建 → 返回 null 不抛异常', EXPORT.get_disbandRoom({}), null);
|
||||
noThrow(() => EXPORT.get_disbandRoom({ o_desk: { method: { curr_paiju: () => undefined } } })), null);
|
||||
t.eq('解散·牌桌尚未创建 → 返回 null 不抛异常', noThrow(() => EXPORT.get_disbandRoom({})), null);
|
||||
// get_deskinfo 有同一个 o_desk 守卫(平台在开战前也可能回调),一并钉住
|
||||
t.eq('重连·牌桌尚未创建 → 返回 null 不抛异常', noThrow(() => EXPORT.get_deskinfo({}, 0)), null);
|
||||
|
||||
// ============ 出牌入参顺序无关性(端到端)============
|
||||
// 同一手完全合法的跟牌,仅客户端提交的数组顺序不同,本轮胜者/捡分/扣底/结算判定必须完全一致。
|
||||
|
||||
Reference in New Issue
Block a user