# Admin 测试环境 HTTP 模块 总入口是 `../admin-test-env-acceptance.mjs`。每个业务模块使用独立的同名 `.mjs` 文件,避免多个对话同时修改总入口。 例如 `--modules system,inbound-weight-ocr` 会依次加载: - `system.mjs` - `inbound-weight-ocr.mjs` 模块只需导出: ```js export async function run(context) { const response = await context.request('GET', '/api/platform/v1/example') const data = context.apiSuccess('example', '查询示例', response) context.assert('example', '示例结构正确', response, Array.isArray(data), `count=${data?.length ?? 'n/a'}`) } ``` ## 可用上下文 - `request(method, path, body?, token?, extraHeaders?)`:JSON HTTP 请求,自动使用平台 Token;幂等写操作通过 `extraHeaders` 传 `Idempotency-Key`。 - `requestBinary(method, path)`:文件下载,不把二进制写入报告。 - `apiSuccess(module, name, response, evidence?, options?)`:断言 HTTP 200 + body code `200`,成功时返回 data。 - `assert(module, name, response, condition, evidence, options?)`:业务断言。 - `expectConflict(module, name, response, scenario)`:断言并发冲突。 - `addStep(...)`:写入统一步骤报告。 - `marker`:本轮唯一测试标记。 - `createdResources`:登记测试资源 ID。 - `context`:模块间共享少量 ID;模块应尽量独立。 ## 约束 - 不记录密码、Token、图片二进制或 OCR 原文全文。 - 测试数据必须带 `context.marker`;可删除的清理,不能删除的最终停用。 - 缺少已确认契约时记录失败或 `deploymentBlocker`,不得模拟成功。 - 一个模块只修改自己的 `.mjs`,不要修改其他模块文件。 ## 供应商模块 `suppliers.mjs` 覆盖平台公共供应商的列表、统计、新增、详情、编辑、启停及主要错误边界。执行: ```powershell node scripts/admin-test-env-acceptance.mjs --modules suppliers ``` 该命令会调用测试环境写 API,只有当前对话明确授权后才允许执行。验收供应商最终停用但不删除;静态合同可安全离线运行: ```powershell node --test scripts/admin-test-env-modules/suppliers-contract.test.mjs ```