67 lines
3.7 KiB
Markdown
67 lines
3.7 KiB
Markdown
|
|
---
|
|||
|
|
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-"`。
|