diff --git a/server/games/erqiwang/test/test_endgame.js b/server/games/erqiwang/test/test_endgame.js index fcc8b7e..2bade6c 100644 --- a/server/games/erqiwang/test/test_endgame.js +++ b/server/games/erqiwang/test/test_endgame.js @@ -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); // ============ 出牌入参顺序无关性(端到端)============ // 同一手完全合法的跟牌,仅客户端提交的数组顺序不同,本轮胜者/捡分/扣底/结算判定必须完全一致。