codex测试必须启用数据库沙箱保护,否则将直连生产环境;应配置sandbox_mode为"read-only"或"workspace-write",强制使用内存数据库,并检查测试代码避免硬编码生产连接串。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

用Codex运行测试时,最怕它直接连上生产数据库、清空用户表或修改订单状态——这类操作不可逆,且往往在你没注意时就已完成。
确认当前是否启用数据库沙箱保护
打开 Codex 配置目录:~/Library/Application Support/CodexBar/config.toml,检查是否存在 sandbox_mode 字段。
若不存在该字段,或值为 "disabled",【所有数据库操作都将直连真实环境】,此时禁止运行任何含写操作的测试。
必须手动添加并设为安全模式之一:
方法一:仅允许读取(适合验证查询逻辑)
设置 sandbox_mode = "read-only",并补充 host 和 port 白名单,例如只允许连接 localhost:5432。
方法二:限定写入路径(适合本地 SQLite 测试)
设置 sandbox_mode = "workspace-write",并在 [sandbox_workspace_write] 下声明可写根目录,如:writable_roots = ["./data", "./test/db"]。【超出该路径的任何写操作会被沙箱拦截并报错】
强制测试使用内存数据库
第一步:在项目根目录创建 test.env 文件,写入:DATABASE_URL=sqlite:///:memory:
第二步:告诉 Codex 启动测试前先加载该环境变量:
“请使用 test.env 中的配置运行 npm test,不要读取 .env 或 .env.local。”
配置 OpenClaw 多提供商认证与 OpenAI Codex OAuth 备用方案,实现自动模型切换,适用于多 OpenAI Codex 账户设置。
这一步绕过所有外部数据库配置,确保每次测试都在全新内存实例中执行,关机即销毁,无残留风险。
检查测试命令是否隐含真实连接
运行:grep -r "process\.env\.DATABASE_URL\|os\.getenv.*DB" test/ --include="*.js" --include="*.py"
如果输出中出现未被 test.env 覆盖的硬编码连接串(如 postgresql://prod:xxx@prod-db/),【该测试文件必须重写,否则 Codex 会直接连生产库】。
临时规避方法:在执行前让 Codex 注释掉对应行,但仅限单次调试,不可提交。
启用迁移演练模式而非真实执行
方法一:对数据库变更类任务,明确指令:
“只生成 SQL 迁移语句,不执行;输出后暂停,等我确认再继续。”
方法二:要求 Codex 在执行前自动启动事务并立即回滚:
“在每个测试用例开头加 BEGIN;,结尾加 ROLLBACK;,确保无数据落盘。”
注意:此方式仅对支持事务的数据库(PostgreSQL、MySQL)有效,SQLite 的 DDL 操作无法回滚,需额外规避。










