MarsCode测试覆盖详解:保留提示词细节的5个关键步骤
MarsCode 的测试覆盖说明功能,核心在于清晰列出三要素:输入值(例如 email = null)、对应源码位置(例如 /src/validator.ts 第 15 行)、实际执行路径(例如绕过正则校验,直接抛出 throw new Error('Invalid email'))。避免使用含混动词,必须绑定覆盖率数据或 git blame 锚点,才能确保说明有效。
千万避免只输出“已覆盖主流程”这种空泛结论。必须明确写出:null 输入触发第 12 行的 if 分支、空字符串导致 validateEmail() 提前 return false、超长字符串精准命中 length > 500 的校验路径……这些细节才能证明边界逻辑被真实测试覆盖,否则开发人员拿到报告仍存疑虑。
清除所有“请说明”类指令并重启插件
进入 MarsCode 配置页,找到「自定义提示词」模块,定位当前激活的 test-coverage 模板,将其中所有包含“请说明”“请解释”“请描述”的语句彻底删除。这些指令一旦存在,模型自动进入“汇报模式”,输出只会堆砌“覆盖全面”“逻辑完整”等无效话术。
删除后必须重启 MarsCode 插件,否则缓存保留旧模板,新提示词不会生效。
使用真实测试文件绑定执行路径
方法一:将刚生成的 .test.ts 文件前五行直接粘贴到提示词开头。例如光标停在 user.validator.test.ts 第 3 行,内容为:
describe('UserValidator', () => {
it('should reject null input', () => {
expect(() => UserValidator.validateEmail(null)).toThrow();
});
it('should reject empty string', () => {
随后追加说明:“分析这两条用例分别触发了源码中哪些行、跳过了哪些分支、返回值或异常类型如何影响后续调用链。”
方法二:若测试运行失败,将终端报错首行一并带入。比如报 TypeError: Cannot read property 'trim' of null,则在提示词末尾补充:“据此说明 validateEmail() 第 8 行 this.email.trim() 缺少空值防护,该路径在 null 输入时未被当前测试覆盖。”
不粘贴真实文件,生成的就是通用结论;粘贴错误文件,说明与实际执行路径脱节。MarsCode 依赖 AST 解析,只识别你给出的那几行真实代码,而非口头描述的“那个 validator”。
强制输出三要素细节
第一步,限定输出结构:在提示词末尾添加硬约束——“每条覆盖说明必须严格按以下三要素展开:①输入值(如 email = null)→②命中源码位置(如 /src/validator.ts 第 15 行)→③实际执行路径(如跳过正则校验,直触 throw new Error('Invalid email'))。”
第二步,禁用模糊动词:追加——“禁止出现‘涉及’‘包含’‘相关’等弱指向动词;必须使用‘触发’‘跳过’‘命中’‘绕过’‘抛出’等强动作动词。”
第三步,绑定验证锚点:再加——“所有说明必须引用以下至少一项:①Jest 覆盖率报告中 Branch % 具体数值(如 Branch %: 92.3);②.nyc_output/out.json 中对应函数的 s/t/f 字段;③git blame 显示的最近一次修改提交哈希(来自 2026 年 6 月 20 日)。”
