# 测试与排查 - [自检命令](#自检命令) - [各测试在验什么](#各测试在验什么) - [运行中查看状态](#运行中查看状态) - [故障对照表](#故障对照表) ## 自检命令 ```bash npm test # 全部自检用例(8 套) node scripts/verify-live.mjs # ★重启后第一件事:现场核验(插件加载没有、外壳补丁打没有) node test/manifest.test.mjs # 清单自检:能不能被 DSH 装上并加载(最易静默失败的一层) node test/scripts.test.mjs # 脚本纯函数(如从注册表输出推出 app.asar 路径、GBK 输出解码) node test/template.test.mjs # 邮件长什么样:默认模板、占位符、空行整理、会话名来源 node test/smtp.test.mjs # 本地假 SMTP 服务器跑完整对话 node test/plugin.test.mjs # 触发判定:看界面不发、离开才发、去重、节流、提问、设置接口 node test/host-integration.test.mjs # ★真运行时:真 cordis + 真 webServer 上挂载并走真 HTTP 断言 node test/client.test.mjs # 浏览器半侧:在场上报、提示退化、设置面板(两级页面 + 模板预览) node shell-patch/test-completion-bridge.mjs # 外壳注入脚本行为(原版 vs 修补版对照) node test/live-probe.mjs # 真连 smtp.qq.com:465,只握手不发信(验证网络/端口) node scripts/send-test.mjs --check # 只看配置填全没有 node scripts/send-test.mjs --trace # 真发一封并打印完整 SMTP 对话(凭据已隐藏) ``` ## 各测试在验什么 `test/host-integration.test.mjs` 会自己找本机的 DSH 运行时(环境变量 → 桌面程序旁 → 常见安装目录 → 注册表), 找不到就跳过(所以没装 DSH 的环境跑 `npm test` 也是绿的);想手动指定就设 `DSH_RUNTIME_MODULES=<...>/dsh-runtime/node_modules`。它验证的是"真挂得上、真能响应": 挂载不报错、五个路由的真 HTTP 状态码与 JSON、口令不回显与留空不覆盖、 presence 改变在场判定、405/404,以及 **dispose 后路由真的消失、端口真的关闭**。 `scripts/verify-live.mjs` 会逐项报告:宿主半侧是不是新版、配置是否就绪、当前是否判定为"你在看界面"、 **浏览器半侧有没有被装配进页面**(读页面里的 `window.__DSH_BOOT__` 清单)、bundle 能不能取到、 已安装副本与源码是否一致、桌面外壳补丁打了没有 —— 每项不过都会给出该怎么修。 ## 运行中查看状态 `http://127.0.0.1:3080/dsh-email-notify/status` ## 故障对照表 | 现象 | 原因 | | --- | --- | | `535` + 中文提示 | 账号或授权码不对:QQ 要用授权码,不是登录密码 | | 日志里 `配置未完成,跳过发信` | 设置界面里还有没填的(面板顶部会列出缺什么) | | 装完一封邮件都没有 | 0.4.0 起**离开模式默认关**:到会话页头把「离开模式」打开 | | 明明在看界面却收到邮件 | 仅自动模式下可能:窗口没焦点(切到别的程序 / 最小化 / 别的窗口在顶层)就算"离开",符合预期 | | 看界面时收不到插件提示 | 默认 `notifyWhenFocused=false`:桌面外壳自己会弹完成通知。想让插件接管请在设置里打开 | | 收到邮件但主题没有任务名 | 0.3.0 起会显示左侧列表里的会话名;若显示"(未命名会话)"说明三处来源都没有标题 | | 邮件里全是"(未命名会话)" | 会话名来自 `session/title` 事件、会话日志和侧栏投影缓存;极早期(标题还没生成)的通知可能还没有名字 | | 自定义模板后邮件少了几行 | 拼错的占位符会渲染成空。保存时面板会告诉你是哪几个认不出来 | | 邮件里出现 `{会话}` 原文 | 说明宿主半侧还是旧版(模板只在 0.3.0+ 生效)。跑 `node scripts/verify-live.mjs` 确认,然后同步并重启 |