配置系统包含全局配置(GlobalConfig)、项目配置(ProjectConfig)和设置(Settings)三层。测试重点是纯函数校验逻辑、Zod schema 验证和配置合并策略。
| 文件 | 关键导出 |
|---|---|
src/utils/config.ts |
getGlobalConfig, saveGlobalConfig, getCurrentProjectConfig, checkHasTrustDialogAccepted, isPathTrusted, getOrCreateUserID, isAutoUpdaterDisabled |
src/utils/settings/settings.ts |
getSettingsForSource, parseSettingsFile, getSettingsFilePathForSource, getInitialSettings |
src/utils/settings/types.ts |
SettingsSchema(Zod schema) |
src/utils/settings/validation.ts |
设置验证函数 |
src/utils/settings/constants.ts |
设置常量 |
wouldLoseAuthState 检查{ settings, errors: [] }{} → 有效{ permissions: { allow: ['Bash(*)'] } } → 有效{ model: 'sonnet' } → 有效{ env: { FOO: 'bar' } } → 有效{ permissions: { defaultMode: 'invalid' } } → 错误{ model: 123 } → 错误'Bash(npm install)' 格式正确| 依赖 | Mock 方式 | 说明 |
|---|---|---|
| 文件系统 | 临时目录 + mock | config 文件读写 |
lockfile |
mock module | 文件锁 |
getCwd |
mock module | 项目路径判断 |
findGitRoot |
mock module | 项目根目录 |
process.env |
直接设置/恢复 | CLAUDE_CODE_DISABLE_AUTOUPDATER 等 |
/tmp/claude-test-xxx/
├── .claude/
│ ├── settings.json # projectSettings
│ └── settings.local.json # localSettings
├── home/
│ └── .claude/
│ └── settings.json # userSettings(mock HOME)
└── project/
└── .git/