跑一次测试,几百个用例通过,一个失败。测试运行器把每一个通过用例的名字、每个文件的进度、一段汇总,连同那段真正需要的堆栈信息,一起打印出来。人滚动终端时会自动忽略噪音,编码Agent不会滚动,它读的就是命令打印出来的全部内容。
![]()
问题在于,有用的那部分可能被截掉。失败命令回传到Claude Code的内容,内联部分大约只有10,000个字符。超出之后,Claude拿到的是"该长度的头尾摘录",而且没有指向剩余内容的文件路径。红色测试运行的退出码非零,会被算作失败,偏偏这种运行里,中间那段最关键。
能塞进去的部分还会留下来。Claude Code"每次请求都会发送完整对话",那些通过用例的名字会跟着后续轮次一路漂,直到对话被压缩或清空。你改不了Agent怎么读,但能改运行器打印什么。
先量,再改
像Agent那样跑测试:走管道,不进交互式终端,把标准错误合并进标准输出,然后数字节。wc -c统计的是字节数,纯ASCII输出下等同于字符数,也就是Claude Code限额用的单位。具体数字取决于你的测试套件——多少用例、日志打多少、堆栈多深,所以在自己的项目上跑,每加一个参数前后各测一次,只留下真正让计数下降的参数。
想一次比较多个变体,可以用一个小循环:
- Vitest--reporter=minimal。Vitest 4.1新增了这个报告器,目标是"减少AI Agent的token消耗",只打印失败用例及其错误信息,抑制通过用例的控制台日志和汇总段。未配置报告器且检测到AI编码Agent时,它会自动启用。配置里写死了报告器、或检测没认出你的Agent时,需要手动传。
- Jest--silent,阻止测试通过控制台打印消息。Jest有个默认值会咬Agent:verbose在只有一个测试文件时为true,而修完一个文件后的快速重跑,正是Agent最常做的事。
- pytest-q是安静模式,要提防的是脚本和addopts里的-v-vv,后者连断言文本都不再截断。
- pytest--tb=short。默认的--tb=auto会给首尾条目打长堆栈,short保留文件、行号和失败断言,通常够Agent动手;--tb=line往往太少。若addopts开了--showlocals,每次堆栈都带局部变量,可用--no-showlocals关掉。
Go、Rust、PHP、Ruby
go test ./...本身已经安静,通过的包只打一行ok汇总。-v会把所有测试和Log输出都打出来,Makefile目标或Agent顺手加上它就前功尽弃。想要更友好的视图可以用gotestsum包装go test -json,默认的pkgname格式每个包一行,dots格式每个用例一个字符,两者增长维度不同,都得在仓库里实测。
Cargo要两边都加:cargo test -q -- --quiet。第一个-q是Cargo自己的,隐藏它的日志;--之后的交给测试框架,libtest的--quiet每个用例显示一个字符而非一行,是--format=terse的别名,默认的pretty则是一行一个用例。
PHPUnit用--no-progress关掉执行进度,失败和结果汇总照常打印。要避开两个邻居:--testdox按名字报告每个用例,--no-output连失败详情一起吞掉。RSpec默认就是progress格式,通过打点、失败打F;如果项目的.rspec文件里写了--format documentation,改成progress或直接删掉那行。
第九个开关:第一个失败就停
上面每个运行器都有同一个开关的变体。Agent在修一个问题时,第一个失败之后的输出,都是它动手前要先读完的负担。Cargo的提前停止粒度更粗:第一个测试可执行文件失败就退出,但libtest仍会跑完该文件内的所有用例,它自己的--fail-fast需要-Z unstable-options。
拼起来的快速循环大致是这样:
- npx vitest run --reporter=minimal --bail=1
- npx jest --silent --bail
- pytest -q --tb=short -x
- go test -failfast ./...
- cargo test -q -- --quiet
- vendor/bin/phpunit --no-progress --stop-on-failure
- bundle exec rspec --format progress --fail-fast
提前停止是给循环用的,不是给终点用的。Agent说完成之前,应该安静地跑完整套件,读完每一个失败。
把命令钉住,再看表
参数只有被用上才有效。把命令写进Agent会话启动时读取的文件:Claude Code会把CLAUDE.md加载进上下文,AGENTS.md则是Codex、Gemini CLI、Cursor、Aider等读取的开放格式。Claude Code的成本指南还列了两个更重的选项:用PreToolUse钩子重写测试命令,只让失败回来;或在子Agent里跑测试,让冗长输出留在子Agent的上下文里,只返回摘要。
然后要能看到效果。Hermes IDE的2.3.4版本加了上下文计量表,显示对话有多满,接近满时提供Compact。用默认参数和安静参数各跑一次套件,在轮次之间看表。压缩是事后补救且不免费:Claude Code文档指出/compact要读取它总结的对话,压缩一个大上下文本身就是一次大请求。前面那些参数,才是更便宜的修法。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.