style: apply formatter to docs, types, and test files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-04-05 11:56:22 +08:00
parent 9791a84047
commit e54d94fce2
13 changed files with 444 additions and 358 deletions

View File

@@ -11,20 +11,20 @@
### 失败测试分布
| 测试文件 | 失败数量 | 根因分类 | 预计工时 |
|---------|---------|---------|---------|
| `logger.test.ts` | 11 failures | Winston format mock + 循环依赖 | 2-3h |
| `update-service.test.ts` | 1 failure | Mock 参数不匹配 | 30min |
| `update-installer.test.ts` | 1 failure | 路径断言错误 | 15min |
| **总计** | **13 failures** | - | **~3-4h** |
| 测试文件 | 失败数量 | 根因分类 | 预计工时 |
| -------------------------- | --------------- | ------------------------------ | --------- |
| `logger.test.ts` | 11 failures | Winston format mock + 循环依赖 | 2-3h |
| `update-service.test.ts` | 1 failure | Mock 参数不匹配 | 30min |
| `update-installer.test.ts` | 1 failure | 路径断言错误 | 15min |
| **总计** | **13 failures** | - | **~3-4h** |
### 测试通过率
| 指标 | 当前 | 修复后 |
|------|------|--------|
| 失败套件 | 3 suites | 0 suites |
| 失败测试 | 13 tests | 0 tests |
| 通过率 | 95% (311/327) | 100% (327/327) |
| 指标 | 当前 | 修复后 |
| -------- | ------------- | -------------- |
| 失败套件 | 3 suites | 0 suites |
| 失败测试 | 13 tests | 0 tests |
| 通过率 | 95% (311/327) | 100% (327/327) |
---
@@ -42,6 +42,7 @@
#### 问题诊断
**失败模式**:
```
TypeError: __vite_ssr_import_0__.default.format(...) is not a function
at src/main/services/logger/index.ts:114:4
@@ -54,6 +55,7 @@ TypeError: __vite_ssr_import_0__.default.format(...) is not a function
3. **具体表现**: 第 114 行的 `winston.format()` 链式调用在 mock 环境中返回 undefined
**调用栈**:
```
logger.test.ts
→ imports logger.ts
@@ -63,6 +65,7 @@ logger.test.ts
```
**文件位置**:
- 测试文件:`tests/unit/logger.test.ts`
- 被 mock 文件:`src/main/services/logger/index.ts:100-116`
- Setup mock: `tests/setup.ts` (无 winston mock 冲突)
@@ -135,11 +138,13 @@ vi.mock('winston', () => ({
**方案 B: 将 logger.test.ts 转为集成测试 (2 小时)**
如果 mock 过于复杂,可以考虑:
- 使用 vi.resetModules() 确保每次测试都重新加载
- 使用 vi.mock(importOriginal) 混合真实模块
- 或完全重写测试,只测试 logger 的公共 API
**预期结果**:
- ✅ 18/18 tests passing
- ✅ format().combine().timestamp().printf() 链式调用正常工作
- ✅ logger 创建、子 logger、日志输出测试全部通过
@@ -165,8 +170,9 @@ vi.mock('winston', () => ({
**失败测试**: `checks updates for user and auto-downloads available recommendation`
**错误信息**:
```
AssertionError: expected "vi.fn()" to be called with arguments:
AssertionError: expected "vi.fn()" to be called with arguments:
['stable/1.1.0.exe', 'preview/1.1.0.exe']
Number of calls: 0
@@ -175,6 +181,7 @@ Number of calls: 0
**根因**: Mock 调用参数与实际调用不匹配
**代码位置**:
- 测试文件:`tests/unit/update-service.test.ts:165-175`
- 被测文件:`src/main/services/update/update-service.ts`
@@ -200,12 +207,14 @@ it('checks updates for user and auto-downloads available recommendation', async
**步骤 2.2.3**: 更新测试断言
**选项 A: 匹配实际调用**
```typescript
// 如果实际只调用了一个参数
expect(mockDownload).toHaveBeenCalledWith('stable/1.1.0.exe')
```
**选项 B: 使用更松散的断言**
```typescript
// 如果参数顺序或数量有变化
expect(mockDownload).toHaveBeenCalled()
@@ -213,14 +222,12 @@ expect(mockDownload.mock.calls[0]).toContain('stable/1.1.0.exe')
```
**选项 C: 调整 mock 设置**
```typescript
// 确保 mock 正确设置
mockDownload.mockClear()
// ... 触发动作 ...
expect(mockDownload).toHaveBeenCalledWith(
expect.stringContaining('stable'),
expect.any(String)
)
expect(mockDownload).toHaveBeenCalledWith(expect.stringContaining('stable'), expect.any(String))
```
#### 成功标准
@@ -243,8 +250,9 @@ expect(mockDownload).toHaveBeenCalledWith(
**失败测试**: `builds downloaded package path under userData pending-update`
**错误信息**:
```
AssertionError: expected 'D:\...\test-user-data\pending-update\stable-1.2.3.exe'
AssertionError: expected 'D:\...\test-user-data\pending-update\stable-1.2.3.exe'
to contain 'logs\pending-update'
Expected: "logs\pending-update"
@@ -254,6 +262,7 @@ Received: "D:\...\test-user-data\pending-update\stable-1.2.3.exe"
**根因**: Electron mock 的 `app.getPath('userData')` 返回 `test-user-data`,但测试期望路径包含 `logs`
**代码位置**:
- 测试文件:`tests/unit/update-installer.test.ts:13-16`
- Setup mock: `tests/setup.ts:17-24`
@@ -286,6 +295,7 @@ userData: path.join(process.cwd(), 'logs')
```
**推荐**: 方案 2.3.1 (测试适应 mock)
- 理由mock 是为了测试隔离,测试应该适应 mock 环境
#### 成功标准
@@ -310,6 +320,7 @@ npm run test:run tests/unit/logger.test.ts
```
**失败时排查**:
1. 检查 vi.mock 是否在文件顶部 (hoisted)
2. 清除 vitest 缓存:`npx vitest --clearCache`
3. 检查是否有多个 winston mock 冲突
@@ -354,11 +365,11 @@ npm run test:run 2>&1 | Select-String "Test Files.*failed"
### 技术指标
| 指标 | 修复前 | 修复后 | 验证命令 |
|------|-------|-------|---------|
| 失败套件 | 3 suites | 0 suites | `npm run test:run` |
| 失败测试 | 13 tests | 0 tests | `npm run test:run` |
| 通过率 | 95% (311/327) | **100%** (327/327) | 测试报告 |
| 指标 | 修复前 | 修复后 | 验证命令 |
| -------- | ------------- | ------------------ | ------------------ |
| 失败套件 | 3 suites | 0 suites | `npm run test:run` |
| 失败测试 | 13 tests | 0 tests | `npm run test:run` |
| 通过率 | 95% (311/327) | **100%** (327/327) | 测试报告 |
### 验收条件
@@ -373,11 +384,11 @@ npm run test:run 2>&1 | Select-String "Test Files.*failed"
### 技术风险
| 风险 | 可能性 | 影响 | 缓解措施 |
|------|--------|------|---------|
| logger mock 实现复杂 | 中 | 高 | 采用延迟 mock先跑通一部分测试 |
| 链式调用 mock 不完整 | 高 | 中 | 使用 createFormatFn 工厂函数 |
| 循环依赖难解耦 | 低 | 高 | 只修复 mock不重构依赖关系 |
| 风险 | 可能性 | 影响 | 缓解措施 |
| -------------------- | ------ | ---- | ------------------------------- |
| logger mock 实现复杂 | 中 | 高 | 采用延迟 mock先跑通一部分测试 |
| 链式调用 mock 不完整 | 高 | 中 | 使用 createFormatFn 工厂函数 |
| 循环依赖难解耦 | 低 | 高 | 只修复 mock不重构依赖关系 |
### 时间风险
@@ -386,6 +397,7 @@ npm run test:run 2>&1 | Select-String "Test Files.*failed"
- **保守估计**: 6 小时 (遇到意外问题)
**风险缓解**: 如果 logger mock 问题超过 3 小时无法解决,考虑:
1. 暂时跳过 logger.test.ts (保持 95% 通过率)
2. 先修复简单的 update 测试 (13 failures → 2 failures)
3. 记录问题,后续专门花精力解决
@@ -401,6 +413,7 @@ npm run test:run 2>&1 | Select-String "Test Files.*failed"
**实际工时**: X 小时
**修复步骤**:
1. [ ] 诊断 mock 问题
2. [ ] 实现 formatFn 工厂
3. [ ] 添加所有链式方法
@@ -408,10 +421,12 @@ npm run test:run 2>&1 | Select-String "Test Files.*failed"
5. [ ] 验证测试通过
**遇到的问题**:
- 问题 1: [描述] → 解决方案: [方案]
- 问题 2: [描述] → 解决方案: [方案]
**关键代码**:
```typescript
// 最终有效的 mock 实现
```
@@ -424,7 +439,8 @@ npm run test:run 2>&1 | Select-String "Test Files.*failed"
**结束时间**: HH:MM
**实际工时**: X 分钟
**修复方式**:
**修复方式**:
- [ ] 修改断言
- [ ] 修改 mock 参数
- [ ] 其他: [描述]
@@ -439,7 +455,8 @@ npm run test:run 2>&1 | Select-String "Test Files.*failed"
**结束时间**: HH:MM
**实际工时**: X 分钟
**修复方式**:
**修复方式**:
- [ ] 修改断言
- [ ] 修改 mock
- [ ] 其他: [描述]