test(electron): 多账号真实验收脚本(真起打包产物 + 两个真实账号)

test/manual/multi-account-verify.mjs:预置 accounts.json 后起打包产物,
判据落在**网络层**而不是"列表里有多少行" —— 收件箱按会话分组且默认折叠,
DOM 行数 ≠ 邮件数,用行数当判据只会得到一条随折叠状态变化的假绿/假红。

21 项判据,实测 21/21:
- 聚合 = 每个可用账号各一次收件箱请求、**各带自己的令牌**(抓请求头确认没串号)
- 徽标的存在与否是单/聚合视图的确定性差异(单账号视图不该有徽标)
- 切到单账号只问那一个账号、且带的是它的令牌
- 添加流程:无效密钥当场拒绝(不写进列表)、有效密钥写入并落盘
- 落盘 accounts.json 权限 600、内容与界面一致

★ 修一处**判据自伤**:无效密钥那步故意发 401,最初我把它算成"页面错误"导致
假红;改成"断言这个 401 确实是本步造出来的"(直接过滤 401 会把真实的鉴权故障
一起放过去)。
This commit is contained in:
2026-09-13 06:38:58 +08:00
parent addde97600
commit 085e6384a0

View File

@ -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);