Skip to main content
沙箱 coding 题常用一份隐藏测试判分:Agent 改完代码后,评估用例把测试文件写进 Sandbox 执行, 测试通过就算过。这份测试文件就是判分标准本体——改了它,等于换了一道题,旧结果不能再采信。 loadText 读它,NiceEval 会把文件内容算进这条评估用例的 fingerprint: 文件改一字节,下次运行这条评估用例自动重跑,其它评估用例照常复用缓存。 用 fs.readFile 自己读拿到的内容一样,但 NiceEval 不知道这次读取发生过—— 改了测试文件,缓存照常命中,你看到的是拿旧测试判出来的旧结论。

步骤

  1. 判据文件与评估用例一起放进仓库:
  2. .eval.ts模块顶层读入:
    路径写项目根相对的字符串也可以:loadText("evals/fixtures/react-datepicker/pr-6058/tests/run-tests.sh")loadText 直接收 URL 对象,不需要 import node:url
  3. test(t) 里写进 Sandbox 并执行:
改一下 datepicker_test.test.tsx 再跑同一条命令,只有这条评估用例重跑,验证生效。

注意

  • loadText 必须写在模块顶层。 缓存判断发生在运行之前,写进 test(t) 里运行期才读就来不及了, NiceEval 会直接报错并提示挪到顶层。
  • 读 Agent 的产物用 t.sandbox,不用 loadText Sandbox 里 Agent 跑出来的文件是本次运行的证据, 每次都不同,不属于 fingerprint。用 t.sandbox.file(...) 一类断言去读。
  • 判据是结构化数据(case 对照表)时用 loadYaml / loadJson, 见数据驱动测试