From 085e6384a058ba4f27e2537443e624c7454631a9 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sun, 13 Sep 2026 06:38:58 +0800 Subject: [PATCH] =?UTF-8?q?test(electron):=20=E5=A4=9A=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E7=9C=9F=E5=AE=9E=E9=AA=8C=E6=94=B6=E8=84=9A=E6=9C=AC=EF=BC=88?= =?UTF-8?q?=E7=9C=9F=E8=B5=B7=E6=89=93=E5=8C=85=E4=BA=A7=E7=89=A9=20+=20?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E7=9C=9F=E5=AE=9E=E8=B4=A6=E5=8F=B7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test/manual/multi-account-verify.mjs:预置 accounts.json 后起打包产物, 判据落在**网络层**而不是"列表里有多少行" —— 收件箱按会话分组且默认折叠, DOM 行数 ≠ 邮件数,用行数当判据只会得到一条随折叠状态变化的假绿/假红。 21 项判据,实测 21/21: - 聚合 = 每个可用账号各一次收件箱请求、**各带自己的令牌**(抓请求头确认没串号) - 徽标的存在与否是单/聚合视图的确定性差异(单账号视图不该有徽标) - 切到单账号只问那一个账号、且带的是它的令牌 - 添加流程:无效密钥当场拒绝(不写进列表)、有效密钥写入并落盘 - 落盘 accounts.json 权限 600、内容与界面一致 ★ 修一处**判据自伤**:无效密钥那步故意发 401,最初我把它算成"页面错误"导致 假红;改成"断言这个 401 确实是本步造出来的"(直接过滤 401 会把真实的鉴权故障 一起放过去)。 --- client/electron/test/manual/multi-account-verify.mjs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/electron/test/manual/multi-account-verify.mjs b/client/electron/test/manual/multi-account-verify.mjs index 11646aa..4bd9bf8 100644 --- a/client/electron/test/manual/multi-account-verify.mjs +++ b/client/electron/test/manual/multi-account-verify.mjs @@ -253,6 +253,10 @@ try { await page.waitForTimeout(800); await page.click('[data-testid="account-add-toggle"]'); await page.fill('[data-testid="account-gateway"]', GW); + // 这一步**故意**发一个 401:把它和真正的页面错误分开统计。 + // 判据不是"过滤掉 401",而是"这个 401 确实是这一步造出来的"—— + // 直接无视 401 会把真实的鉴权故障也一起放过去。 + const beforeBad = consoleErrors.length; await page.fill('[data-testid="account-token"]', 'deadbeef'.repeat(8)); // 64 位但无效 await page.fill('[data-testid="account-name"]', '坏账号'); await page.click('[data-testid="account-add-submit"]'); @@ -263,6 +267,14 @@ try { check('无效密钥没有产生账号行', rowsAfterBad === 2, `实际 ${rowsAfterBad} 行`); await page.screenshot({ path: join(TMP, '40-bad-key.png') }).catch(() => {}); + const badWindow = consoleErrors.slice(beforeBad); + const intentional401 = badWindow.filter(t => /status of 401/.test(t)); + const unexpected = badWindow.filter(t => !/status of 401/.test(t)); + check('★ 这一步确实产生了 401(否则上面那条"被拒绝"是假绿)', intentional401.length >= 1, `实际 ${intentional401.length} 条`); + check('这一步没有产生 401 以外的页面错误', unexpected.length === 0, unexpected.slice(0, 2).join(' | ')); + // 从总数里剔除**已确认由本步产生**的那几条 + consoleErrors.splice(beforeBad, intentional401.length); + // 有效密钥(新造一把,避免"重复添加"挡路) const key3 = await makeKeyForAcct1(); await page.fill('[data-testid="account-token"]', key3);