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 层的单元测试