Affaan Mustafa 6556f20af7 docs: salvage zh-CN command translations
Port the current-source-safe command documentation subset from stale PR #1687.\n\nEach copied command page maps to an English source file unchanged since the stale PR base; fastapi-review remains deferred because #1687 did not include a matching zh-CN translation.
2026-05-11 14:05:38 -04:00

146 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: 运行Flutter/Dart测试报告失败并逐步修复测试问题。涵盖单元测试、组件测试、黄金测试和集成测试。
---
# Flutter 测试
此命令运行 Flutter 测试套件并报告结果。当出现失败时,会逐步诊断并修复问题。
## 此命令的功能
1. **运行测试**:执行 `flutter test`(或限定范围至已更改文件)
2. **解析失败项**:按类型和原因识别失败测试
3. **逐步修复**:尽可能每次只修复一个失败项
4. **验证**:每次修复后重新运行
5. **报告**:显示覆盖率摘要和剩余失败项
## 使用时机
在以下情况使用 `/flutter-test`
* 实现功能后验证未破坏现有功能
* 运行 `/flutter-build` 后确保测试通过
* 检查新代码的测试覆盖率
* 特定测试文件失败时
* 提交 PR 前
## 执行的命令
```bash
# Run all tests
flutter test 2>&1
# Run with coverage
flutter test --coverage 2>&1
# Run specific test file
flutter test test/unit/domain/usecases/get_user_test.dart 2>&1
# Run tests matching a name pattern
flutter test --name "CartBloc" 2>&1
# Run integration tests (requires device/emulator)
flutter test integration_test/ 2>&1
# Update golden files when intentional visual changes are made
flutter test --update-goldens 2>&1
```
## 示例会话
````text
用户:/flutter-test
代理:
# Flutter 测试运行
## 测试执行
```
$ flutter test
00:05 +42 -2: 部分测试失败。
失败test/unit/data/user_repository_test.dart
UserRepository getById
当用户未找到时返回 null
期望null
实际User(id: 'test-id', name: 'Test User')
失败test/widget/cart_page_test.dart
CartPage
购物车为空时显示空状态
期望:恰好一个包含文本 'Your cart is empty' 的组件
找到:没有包含文本 'Your cart is empty' 的组件
```
## 修复 1仓库测试
文件test/unit/data/user_repository_test.dart
失败:`getById` 在应返回 null 时返回了一个用户(针对缺失的 ID
根本原因:测试设置添加了一个 ID 为 'test-id' 的用户,但查询时使用了 'missing-id'。
修复:更新测试以查询 'missing-id' —— 设置是正确的,查询是错误的。
```
$ flutter test test/unit/data/user_repository_test.dart
1 个测试通过。
```
## 修复 2组件测试
文件test/widget/cart_page_test.dart
失败:未找到空状态文本组件
根本原因:组件中的空状态消息已从 'Your cart is empty' 重命名为 'Cart is empty'。
修复:更新测试字符串以匹配当前组件文案。
```
$ flutter test test/widget/cart_page_test.dart
1 个测试通过。
```
## 最终运行
```
$ flutter test --coverage
全部 44 个测试通过。
覆盖率84.2%目标80%
```
## 总结
| 指标 | 值 |
|--------|-------|
| 总测试数 | 44 |
| 通过 | 44 |
| 失败 | 0 |
| 覆盖率 | 84.2% |
测试状态:通过 ✓
````
## 常见测试失败项
| 失败类型 | 典型修复方法 |
|---------|-------------|
| `Expected: <X> Actual: <Y>` | 更新断言或修复实现 |
| `Widget not found` | 修复查找器选择器或组件重命名后更新测试 |
| `Golden file not found` | 运行 `flutter test --update-goldens` 生成 |
| `Golden mismatch` | 检查差异;若变更有意则运行 `--update-goldens` |
| `MissingPluginException` | 在测试设置中模拟平台通道 |
| `LateInitializationError` | 在 `setUp()` 中初始化 `late` 字段 |
| `pumpAndSettle timed out` | 替换为显式 `pump(Duration)` 调用 |
## 相关命令
* `/flutter-build` — 运行测试前修复构建错误
* `/flutter-review` — 测试通过后审查代码
* `tdd-workflow` 技能 — 测试驱动开发工作流
## 相关内容
* 代理:`agents/flutter-reviewer.md`
* 代理:`agents/dart-build-resolver.md`
* 技能:`skills/flutter-dart-code-review/`
* 规则:`rules/dart/testing.md`