--- name: 修复路径和测试数据 overview: 修复测试时 swagger/config 生成到错误目录的问题(根因是 Go test CWD 在 app/ 下),并为 DM 和 MySQL 两个测试数据库创建完善的测试数据表和种子数据。 todos: - id: fix-cwd content: 修复 app_test.go 中的工作目录问题:添加 os.Chdir("..") 并修改 config path status: completed - id: cleanup-wrong-dirs content: 清理错误生成的 example/app/tpt/ 和 example/app/config/ 目录 status: completed - id: setup-mysql content: 创建 setup_mysql.go:MySQL DDL 建表逻辑(与 setup_dm.go 对应) status: completed - id: extract-seed content: 提取通用种子数据函数 seedTestData,DM 和 MySQL 共用 status: completed - id: update-testmain content: 更新 app_test.go 增加 SetupMySQLDatabase 调用 status: completed - id: sql-scripts content: 在 example/sql/ 下提供 MySQL 和 DM 的原始 DDL+DML SQL 脚本 status: completed - id: verify-tests content: 运行测试验证 swagger 输出到正确位置,且 DM 测试全部通过 status: completed isProject: false --- # 修复 Swagger 路径问题 + 完善双数据库测试数据 ## 问题 1:Swagger 和 config 生成到错误目录 **根因**:`go test ./app/...` 时,Go test 将工作目录设为包目录 `example/app/`。配置文件中 `"tpt": "tpt"` 和 `codeConfig` 中的 `"config/admin.json"` 等相对路径,都从 `example/app/` 解析,导致文件生成到 `example/app/tpt/` 和 `example/app/config/` 而非预期的 `example/tpt/` 和 `example/config/`。 **修复方案**:在 [example/app/app_test.go](example/app/app_test.go) 的 `TestMain` 中,`NewTestApp` 之前先 `os.Chdir("..")`,将工作目录切回 `example/`,然后将配置路径从 `"../config/config.json"` 改为 `"config/config.json"`: ```go func TestMain(m *testing.M) { os.Chdir("..") // 切回 example/ 目录,使 tpt、config 等相对路径正确解析 testApp = NewTestApp("config/config.json", ...) ... } ``` 同时清理已错误生成的 `example/app/tpt/` 和 `example/app/config/` 目录。 ## 问题 2:双数据库测试数据 现有 [example/app/setup_dm.go](example/app/setup_dm.go) 仅处理 DM。需要为 MySQL 创建类似的初始化逻辑,并使种子数据逻辑可复用。 **数据库结构**(DM 和 MySQL 共用同一套表): - `admin` — 管理员表(id, name, phone, state, password, role_id, title, create_time, modify_time) - `ctg` — 分类表(id, name, state, create_time, modify_time) - `article` — 文章表(id, title, author, content, state, click_num, sort, img, ctg_id, admin_id, create_time, modify_time) - `test_batch` — 批量测试表(id, name, title, state, create_time) - `cached` — 老版本缓存表(id, key, value, endtime, time) - `hotime_cache` — 新版缓存表(id, key, value, end_time, state, create_time, modify_time) **方案**: 1. 创建 [example/app/setup_mysql.go](example/app/setup_mysql.go):包含 MySQL DDL 建表和种子数据灌入,类似 `setup_dm.go` 的结构 2. 在 [example/app/app_test.go](example/app/app_test.go) 的 `TestMain` 中增加 `SetupMySQLDatabase(&testApp.Db)` 调用(根据 `db.Type` 自动判断是否执行) 3. 种子数据使用 ORM 的 `db.Insert()` 方法,与数据库类型无关,可直接复用现有 `setup_dm.go` 中 `seedDMData` 的逻辑,提取为通用的 `seedTestData` 函数 4. 同时提供 MySQL 和 DM 的原始 DDL/DML SQL 脚本,放在 `example/sql/` 目录下,方便手动执行 **config.json 切换方式**:当前 MySQL 的 key 是 `"mysql-"`(带尾缀表示禁用),DM 的 key 是 `"dm"`(活跃)。切换数据库只需互换后缀:`"mysql"` / `"dm-"`。