# 测试策略

## 首期选择

首期以 Playwright 端到端测试为主。金额精度、汇率换算和同步合并等不适合只靠界面验证的纯逻辑，应补充针对性单元测试。

## 原则

- 测试真实用户路径，不测试内部实现。
- 优先覆盖高风险流程。
- 使用手机视口作为主要测试环境。
- 测试数据可重复创建和清理。
- 不为早期快速变化的组件写细碎测试。

## 首期覆盖

### 记账

- 新增一笔收入。
- 新增一笔支出。
- 使用不同币种记账。
- 编辑账目。
- 删除账目。
- 刷新页面后账目仍存在。

### 账本权限

- 用户只能看到自己有权限的账本。
- 独享账本不对其他用户可见。
- owner 可以生成邀请。
- 被邀请成员加入后可以看到账本。

### 离线

- 离线时可以新增账目。
- 离线且汇率服务不可用时仍可新增外币账目。
- 离线刷新后应用仍能打开。
- 恢复网络后触发同步。

### 同步

- 同一操作重复提交不会重复记账。
- 多设备拉取后能看到同一账本流水。
- 同一账目离线冲突时最后写入胜出。
- 待换算和临时汇率账目恢复网络后可以回补。

### 汇率与统计

- 按记账日期保存历史汇率快照。
- 外部汇率服务失败时使用缓存或进入待换算状态。
- 人民币汇总不重复调用外部汇率服务。
- 多账本关联的同一账目在跨账本统计中只计算一次。
- 不同最小单位和金额舍入规则通过单元测试覆盖。

## 暂不覆盖

- 组件测试。
- 大规模性能测试。
- 视觉回归测试。

## 推荐命令

```bash
npm run test:e2e
```
