1
0

fix: 修复后端配置加载测试失败

- 修复 viper SafeWriteConfig 与 SetConfigFile 不兼容问题
  - 将 SafeWriteConfig() 替换为 SafeWriteConfigAs(configPath)
  - 绕过 viper 的 configPaths 检查
- 调整 Makefile 测试命令分类
  - backend-test: 仅运行后端核心测试
  - backend-test-all: 运行全部后端测试(含 desktop)
  - desktop-test: 单独运行桌面应用测试
- 同步 config-management 和 test-coverage 规范
This commit is contained in:
2026-04-24 14:06:03 +08:00
parent 4c6b49099d
commit 195762ff97
4 changed files with 32 additions and 15 deletions

View File

@@ -1,11 +1,11 @@
.PHONY: all dev build test lint clean \ .PHONY: all dev build test lint clean \
backend-build backend-run backend-dev backend-test backend-test-unit backend-test-integration backend-test-coverage \ backend-build backend-run backend-dev backend-test backend-test-all backend-test-unit backend-test-integration backend-test-coverage \
backend-lint backend-clean backend-deps backend-generate \ backend-lint backend-clean backend-deps backend-generate \
backend-db-up backend-db-down backend-db-status backend-db-create \ backend-db-up backend-db-down backend-db-status backend-db-create \
test-mysql-up test-mysql-down test-mysql test-mysql-quick \ test-mysql-up test-mysql-down test-mysql test-mysql-quick \
frontend-build frontend-dev frontend-test frontend-test-watch frontend-test-coverage frontend-test-e2e frontend-lint frontend-clean \ frontend-build frontend-dev frontend-test frontend-test-watch frontend-test-coverage frontend-test-e2e frontend-lint frontend-clean \
desktop-build desktop-build-mac desktop-build-win desktop-build-linux \ desktop-build desktop-build-mac desktop-build-win desktop-build-linux \
desktop-dev desktop-package-mac desktop-package-win desktop-package-linux desktop-clean \ desktop-dev desktop-test desktop-package-mac desktop-package-win desktop-package-linux desktop-clean \
desktop-prepare-frontend desktop-prepare-embedfs desktop-prepare-frontend desktop-prepare-embedfs
# ============================================ # ============================================
@@ -19,7 +19,7 @@ dev:
build: backend-build frontend-build build: backend-build frontend-build
@echo "✅ Build complete" @echo "✅ Build complete"
test: backend-test frontend-test test: backend-test desktop-test frontend-test
@echo "✅ All tests passed" @echo "✅ All tests passed"
lint: backend-lint frontend-lint lint: backend-lint frontend-lint
@@ -41,6 +41,9 @@ backend-dev:
cd backend && go run ./cmd/server cd backend && go run ./cmd/server
backend-test: backend-test:
cd backend && go test ./internal/... ./pkg/... ./tests/... ./cmd/server/... -v
backend-test-all:
cd backend && go test ./... -v cd backend && go test ./... -v
backend-test-unit: backend-test-unit:
@@ -179,6 +182,9 @@ desktop-dev: desktop-prepare-frontend desktop-prepare-embedfs
@echo "🖥️ Starting desktop app in dev mode..." @echo "🖥️ Starting desktop app in dev mode..."
cd backend && go run ./cmd/desktop cd backend && go run ./cmd/desktop
desktop-test:
cd backend && go test ./cmd/desktop/... -v
desktop-package-mac: desktop-package-mac:
./scripts/build/package-macos.sh ./scripts/build/package-macos.sh

View File

@@ -231,7 +231,7 @@ func setupConfigFile(v *viper.Viper, configPath string) error {
return appErrors.Wrap(appErrors.ErrInternal, err) return appErrors.Wrap(appErrors.ErrInternal, err)
} }
// 配置文件不存在,创建默认配置文件 // 配置文件不存在,创建默认配置文件
writeErr := v.SafeWriteConfig() writeErr := v.SafeWriteConfigAs(configPath)
if writeErr == nil { if writeErr == nil {
return nil return nil
} }

View File

@@ -174,7 +174,7 @@
3. 设置默认值 3. 设置默认值
4. 绑定 CLI 参数 4. 绑定 CLI 参数
5. 绑定环境变量 5. 绑定环境变量
6. 读取配置文件 6. 读取配置文件(不存在时自动创建)
7. 反序列化到结构体 7. 反序列化到结构体
8. 验证配置 8. 验证配置
9. 打印配置摘要 9. 打印配置摘要

View File

@@ -31,16 +31,27 @@
- **THEN** SHALL 测试请求转换、响应转换、流式转换 - **THEN** SHALL 测试请求转换、响应转换、流式转换
- **THEN** SHALL 验证转换的准确性和完整性 - **THEN** SHALL 验证转换的准确性和完整性
#### Scenario: config 加载管道集成测试 #### Scenario: LoadConfigFromPath 默认值验证
- **WHEN** 运行 config 加载管道的集成测试 - **WHEN** 运行 config 加载管道的集成测试
- **THEN** SHALL 验证 LoadConfigFromPath 正确加载默认值 - **THEN** SHALL 验证 LoadConfigFromPath 正确加载默认值
- **THEN** SHALL 验证环境变量(`NEX_` 前缀)覆盖默认值
- **THEN** SHALL 验证 YAML 配置文件正确读取 - **THEN** SHALL 验证 YAML 配置文件正确读取
- **THEN** SHALL 验证优先级链CLI 参数 > 环境变量 > YAML 文件 > 默认值 - **THEN** SHALL 验证优先级链CLI 参数 > 环境变量 > YAML 文件 > 默认值
- **THEN** SHALL 验证首次启动自动创建配置文件 - **THEN** SHALL 验证首次启动自动创建配置文件
- **THEN** SHALL 验证 SaveConfig 后重新 LoadConfig 数据一致 - **THEN** SHALL 验证 SaveConfig 后重新 LoadConfig 数据一致
#### Scenario: 环境变量覆盖验证
- **WHEN** 设置 `NEX_SERVER_PORT=9000``NEX_LOG_LEVEL=debug`
- **THEN** SHALL 成功加载
- **THEN** 配置值 SHALL 反映环境变量覆盖
#### Scenario: 自动创建配置文件验证
- **WHEN** 调用 `LoadConfigFromPath` 并指向不存在的文件路径
- **THEN** SHALL 成功加载(不返回 `missing configuration for 'configPath'` 错误)
- **THEN** SHALL 返回默认配置对象
#### Scenario: handler 错误分支测试 #### Scenario: handler 错误分支测试
- **WHEN** 运行 handler 层的单元测试 - **WHEN** 运行 handler 层的单元测试