From 195762ff9739d75a3795635221b558166046be73 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Fri, 24 Apr 2026 14:06:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=8A=A0=E8=BD=BD=E6=B5=8B=E8=AF=95=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 viper SafeWriteConfig 与 SetConfigFile 不兼容问题 - 将 SafeWriteConfig() 替换为 SafeWriteConfigAs(configPath) - 绕过 viper 的 configPaths 检查 - 调整 Makefile 测试命令分类 - backend-test: 仅运行后端核心测试 - backend-test-all: 运行全部后端测试(含 desktop) - desktop-test: 单独运行桌面应用测试 - 同步 config-management 和 test-coverage 规范 --- Makefile | 12 +++++++++--- backend/internal/config/config.go | 2 +- openspec/specs/config-management/spec.md | 18 +++++++++--------- openspec/specs/test-coverage/spec.md | 15 +++++++++++++-- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index a1d3acb..71f3e2b 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ .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-db-up backend-db-down backend-db-status backend-db-create \ 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 \ 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 # ============================================ @@ -19,7 +19,7 @@ dev: build: backend-build frontend-build @echo "✅ Build complete" -test: backend-test frontend-test +test: backend-test desktop-test frontend-test @echo "✅ All tests passed" lint: backend-lint frontend-lint @@ -41,6 +41,9 @@ backend-dev: cd backend && go run ./cmd/server backend-test: + cd backend && go test ./internal/... ./pkg/... ./tests/... ./cmd/server/... -v + +backend-test-all: cd backend && go test ./... -v backend-test-unit: @@ -179,6 +182,9 @@ desktop-dev: desktop-prepare-frontend desktop-prepare-embedfs @echo "🖥️ Starting desktop app in dev mode..." cd backend && go run ./cmd/desktop +desktop-test: + cd backend && go test ./cmd/desktop/... -v + desktop-package-mac: ./scripts/build/package-macos.sh diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index a39f6cf..587f12a 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -231,7 +231,7 @@ func setupConfigFile(v *viper.Viper, configPath string) error { return appErrors.Wrap(appErrors.ErrInternal, err) } // 配置文件不存在,创建默认配置文件 - writeErr := v.SafeWriteConfig() + writeErr := v.SafeWriteConfigAs(configPath) if writeErr == nil { return nil } diff --git a/openspec/specs/config-management/spec.md b/openspec/specs/config-management/spec.md index 3766110..d51e848 100644 --- a/openspec/specs/config-management/spec.md +++ b/openspec/specs/config-management/spec.md @@ -169,15 +169,15 @@ - **WHEN** 应用启动 - **THEN** SHALL 按以下顺序加载配置: - 1. 解析 CLI 参数(获取 --config 路径) - 2. 初始化配置管理器 - 3. 设置默认值 - 4. 绑定 CLI 参数 - 5. 绑定环境变量 - 6. 读取配置文件 - 7. 反序列化到结构体 - 8. 验证配置 - 9. 打印配置摘要 + 1. 解析 CLI 参数(获取 --config 路径) + 2. 初始化配置管理器 + 3. 设置默认值 + 4. 绑定 CLI 参数 + 5. 绑定环境变量 + 6. 读取配置文件(不存在时自动创建) + 7. 反序列化到结构体 + 8. 验证配置 + 9. 打印配置摘要 #### Scenario: 加载失败处理 diff --git a/openspec/specs/test-coverage/spec.md b/openspec/specs/test-coverage/spec.md index e747e62..1777506 100644 --- a/openspec/specs/test-coverage/spec.md +++ b/openspec/specs/test-coverage/spec.md @@ -31,16 +31,27 @@ - **THEN** SHALL 测试请求转换、响应转换、流式转换 - **THEN** SHALL 验证转换的准确性和完整性 -#### Scenario: config 加载管道集成测试 +#### Scenario: LoadConfigFromPath 默认值验证 - **WHEN** 运行 config 加载管道的集成测试 - **THEN** SHALL 验证 LoadConfigFromPath 正确加载默认值 -- **THEN** SHALL 验证环境变量(`NEX_` 前缀)覆盖默认值 - **THEN** SHALL 验证 YAML 配置文件正确读取 - **THEN** SHALL 验证优先级链:CLI 参数 > 环境变量 > YAML 文件 > 默认值 - **THEN** SHALL 验证首次启动自动创建配置文件 - **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 错误分支测试 - **WHEN** 运行 handler 层的单元测试