@mison/ag-kit-cn 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
- package/.agent/ARCHITECTURE.md +285 -0
- package/.agent/agents/backend-specialist.md +268 -0
- package/.agent/agents/code-archaeologist.md +106 -0
- package/.agent/agents/database-architect.md +225 -0
- package/.agent/agents/debugger.md +225 -0
- package/.agent/agents/devops-engineer.md +242 -0
- package/.agent/agents/documentation-writer.md +104 -0
- package/.agent/agents/explorer-agent.md +73 -0
- package/.agent/agents/frontend-specialist.md +618 -0
- package/.agent/agents/game-developer.md +162 -0
- package/.agent/agents/mobile-developer.md +382 -0
- package/.agent/agents/orchestrator.md +438 -0
- package/.agent/agents/penetration-tester.md +188 -0
- package/.agent/agents/performance-optimizer.md +187 -0
- package/.agent/agents/product-manager.md +112 -0
- package/.agent/agents/product-owner.md +95 -0
- package/.agent/agents/project-planner.md +405 -0
- package/.agent/agents/qa-automation-engineer.md +103 -0
- package/.agent/agents/security-auditor.md +170 -0
- package/.agent/agents/seo-specialist.md +111 -0
- package/.agent/agents/test-engineer.md +158 -0
- package/.agent/mcp_config.json +12 -0
- package/.agent/rules/GEMINI.md +273 -0
- package/.agent/scripts/auto_preview.py +148 -0
- package/.agent/scripts/checklist.py +217 -0
- package/.agent/scripts/session_manager.py +120 -0
- package/.agent/scripts/verify_all.py +327 -0
- package/.agent/skills/api-patterns/SKILL.md +84 -0
- package/.agent/skills/api-patterns/api-style.md +42 -0
- package/.agent/skills/api-patterns/auth.md +24 -0
- package/.agent/skills/api-patterns/documentation.md +26 -0
- package/.agent/skills/api-patterns/graphql.md +41 -0
- package/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/.agent/skills/api-patterns/response.md +37 -0
- package/.agent/skills/api-patterns/rest.md +40 -0
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/.agent/skills/api-patterns/security-testing.md +122 -0
- package/.agent/skills/api-patterns/trpc.md +41 -0
- package/.agent/skills/api-patterns/versioning.md +22 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +74 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +40 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/architecture/SKILL.md +57 -0
- package/.agent/skills/architecture/context-discovery.md +43 -0
- package/.agent/skills/architecture/examples.md +94 -0
- package/.agent/skills/architecture/pattern-selection.md +68 -0
- package/.agent/skills/architecture/patterns-reference.md +50 -0
- package/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/.agent/skills/bash-linux/SKILL.md +201 -0
- package/.agent/skills/behavioral-modes/SKILL.md +264 -0
- package/.agent/skills/brainstorming/SKILL.md +164 -0
- package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
- package/.agent/skills/clean-code/SKILL.md +200 -0
- package/.agent/skills/code-review-checklist/SKILL.md +125 -0
- package/.agent/skills/database-design/SKILL.md +54 -0
- package/.agent/skills/database-design/database-selection.md +43 -0
- package/.agent/skills/database-design/indexing.md +39 -0
- package/.agent/skills/database-design/migrations.md +50 -0
- package/.agent/skills/database-design/optimization.md +36 -0
- package/.agent/skills/database-design/orm-selection.md +30 -0
- package/.agent/skills/database-design/schema-design.md +56 -0
- package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/.agent/skills/doc.md +177 -0
- package/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/.agent/skills/frontend-design/SKILL.md +418 -0
- package/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/.agent/skills/frontend-design/color-system.md +307 -0
- package/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
- package/.agent/skills/frontend-design/typography-system.md +345 -0
- package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
- package/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
- package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/.agent/skills/intelligent-routing/SKILL.md +335 -0
- package/.agent/skills/lint-and-validate/SKILL.md +44 -0
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/.agent/skills/mobile-design/SKILL.md +394 -0
- package/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
- package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/.agent/skills/mobile-design/mobile-typography.md +432 -0
- package/.agent/skills/mobile-design/platform-android.md +666 -0
- package/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
- package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/.agent/skills/parallel-agents/SKILL.md +194 -0
- package/.agent/skills/performance-profiling/SKILL.md +149 -0
- package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/.agent/skills/plan-writing/SKILL.md +152 -0
- package/.agent/skills/powershell-windows/SKILL.md +166 -0
- package/.agent/skills/python-patterns/SKILL.md +441 -0
- package/.agent/skills/red-team-tactics/SKILL.md +203 -0
- package/.agent/skills/rust-pro/SKILL.md +190 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
- package/.agent/skills/server-management/SKILL.md +161 -0
- package/.agent/skills/systematic-debugging/SKILL.md +114 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
- package/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
- package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
- package/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/.agent/workflows/brainstorm.md +113 -0
- package/.agent/workflows/create.md +59 -0
- package/.agent/workflows/debug.md +103 -0
- package/.agent/workflows/deploy.md +176 -0
- package/.agent/workflows/enhance.md +63 -0
- package/.agent/workflows/orchestrate.md +242 -0
- package/.agent/workflows/plan.md +89 -0
- package/.agent/workflows/preview.md +80 -0
- package/.agent/workflows/restore-localize-compat.md +525 -0
- package/.agent/workflows/status.md +86 -0
- package/.agent/workflows/test.md +144 -0
- package/.agent/workflows/ui-ux-pro-max.md +295 -0
- package/AGENT_FLOW.md +609 -0
- package/CHANGELOG.md +68 -0
- package/LICENSE +21 -0
- package/README.md +260 -0
- package/bin/adapters/base.js +63 -0
- package/bin/adapters/codex.js +391 -0
- package/bin/adapters/gemini.js +137 -0
- package/bin/ag-kit.js +1336 -0
- package/bin/core/builder.js +80 -0
- package/bin/core/generator.js +59 -0
- package/bin/core/resource-loader.js +64 -0
- package/bin/core/transformer.js +208 -0
- package/bin/interactive.js +65 -0
- package/bin/utils/atomic-writer.js +97 -0
- package/bin/utils/git-helper.js +68 -0
- package/bin/utils/managed-block.js +65 -0
- package/bin/utils/manifest.js +241 -0
- package/bin/utils.js +82 -0
- package/docs/codex-rules-template.md +36 -0
- package/docs/mapping-spec.md +68 -0
- package/docs/multi-target-adapter.md +80 -0
- package/docs/official/README.md +53 -0
- package/docs/official/antigravity/agent-modes-settings.md +64 -0
- package/docs/official/antigravity/rules-workflows.md +96 -0
- package/docs/official/antigravity/skills.md +147 -0
- package/docs/official/codex/agents-md.md +119 -0
- package/docs/official/codex/config-advanced.md +358 -0
- package/docs/official/codex/config-basic.md +141 -0
- package/docs/official/codex/config-reference.md +223 -0
- package/docs/official/codex/config-sample.md +216 -0
- package/docs/official/codex/mcp.md +107 -0
- package/docs/official/codex/rules.md +79 -0
- package/docs/official/codex/skills.md +114 -0
- package/docs/official/sources-index.md +32 -0
- package/docs/operations.md +145 -0
- package/docs/terminology-style-guide.md +69 -0
- package/package.json +51 -0
- package/scripts/postinstall-check.js +112 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
# 移动端测试模式(Mobile Testing Patterns)
|
|
2
|
+
|
|
3
|
+
> **移动端测试不是 Web 测试。约束不同,策略不同。**
|
|
4
|
+
> 本文件强调“何时用什么方法”和“为什么”。
|
|
5
|
+
> **代码示例尽量少,重点在决策。**
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🧠 移动端测试思维(MOBILE TESTING MINDSET)
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
移动端测试与 Web 不同:
|
|
13
|
+
├── 真机很关键(模拟器会隐藏问题)
|
|
14
|
+
├── 平台差异(iOS vs Android)
|
|
15
|
+
├── 网络条件剧烈变化
|
|
16
|
+
├── 需考虑电量/性能
|
|
17
|
+
├── App 生命周期(后台、被杀、恢复)
|
|
18
|
+
├── 权限与系统对话框
|
|
19
|
+
└── 触控交互 vs 点击
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🚫 AI 移动端测试反模式(ANTI-PATTERNS)
|
|
25
|
+
|
|
26
|
+
| ❌ AI 默认 | 为什么错 | ✅ 移动端正确做法 |
|
|
27
|
+
|-----------|----------|------------------|
|
|
28
|
+
| 只用 Jest | 覆盖不到原生层 | Jest + 真机 E2E |
|
|
29
|
+
| Enzyme 模式 | 过时且偏 Web | React Native Testing Library |
|
|
30
|
+
| 浏览器 E2E(Cypress) | 测不了原生能力 | Detox / Maestro |
|
|
31
|
+
| 全部 mock | 会漏掉集成问题 | 真机集成测试 |
|
|
32
|
+
| 忽略平台差异 | iOS/Android 行为不同 | 平台专测 |
|
|
33
|
+
| 不测性能 | 移动端性能关键 | 低端机 Profiling |
|
|
34
|
+
| 只测 Happy Path | 移动端边界多 | 离线、权限、中断 |
|
|
35
|
+
| 100% 单元测试覆盖 | 虚假安全感 | 金字塔平衡 |
|
|
36
|
+
| 复制 Web 测试模式 | 环境完全不同 | 用移动端工具与策略 |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 1. 测试工具选择(Testing Tool Selection)
|
|
41
|
+
|
|
42
|
+
### 决策树(Decision Tree)
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
你在测什么?
|
|
46
|
+
│
|
|
47
|
+
├── 纯函数/工具/助手
|
|
48
|
+
│ └── Jest(单元测试)
|
|
49
|
+
│ └── 无需特殊移动端配置
|
|
50
|
+
│
|
|
51
|
+
├── 独立组件(隔离)
|
|
52
|
+
│ ├── React Native → React Native Testing Library
|
|
53
|
+
│ └── Flutter → flutter_test(Widget tests)
|
|
54
|
+
│
|
|
55
|
+
├── 带 hooks/context/navigation 的组件
|
|
56
|
+
│ ├── React Native → RNTL + mocked providers
|
|
57
|
+
│ └── Flutter → integration_test
|
|
58
|
+
│
|
|
59
|
+
├── 完整用户流程(登录、结账等)
|
|
60
|
+
│ ├── Detox(RN,快且可靠)
|
|
61
|
+
│ ├── Maestro(跨平台,YAML)
|
|
62
|
+
│ └── Appium(老方案,慢,兜底)
|
|
63
|
+
│
|
|
64
|
+
└── 性能/内存/电量
|
|
65
|
+
├── Flashlight(RN 性能)
|
|
66
|
+
├── Flutter DevTools
|
|
67
|
+
└── 真机 Profiling(Xcode/Android Studio)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 工具对比(Tool Comparison)
|
|
71
|
+
|
|
72
|
+
| 工具(Tool) | 平台 | 速度 | 可靠性 | 适用场景 |
|
|
73
|
+
|-------------|------|------|--------|---------|
|
|
74
|
+
| **Jest** | RN | ⚡⚡⚡ | ⚡⚡⚡ | 单元测试/逻辑 |
|
|
75
|
+
| **RNTL** | RN | ⚡⚡⚡ | ⚡⚡ | 组件测试 |
|
|
76
|
+
| **flutter_test** | Flutter | ⚡⚡⚡ | ⚡⚡⚡ | Widget tests |
|
|
77
|
+
| **Detox** | RN | ⚡⚡ | ⚡⚡⚡ | 关键 E2E |
|
|
78
|
+
| **Maestro** | Both | ⚡⚡ | ⚡⚡ | 跨平台 E2E |
|
|
79
|
+
| **Appium** | Both | ⚡ | ⚡ | 兜底/Legacy |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 2. 移动端测试金字塔(Testing Pyramid for Mobile)
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
┌───────────────┐
|
|
87
|
+
│ E2E Tests │ 10%
|
|
88
|
+
│ (Real device) │ 慢、贵,但关键
|
|
89
|
+
├───────────────┤
|
|
90
|
+
│ Integration │ 20%
|
|
91
|
+
│ Tests │ 组件+上下文
|
|
92
|
+
├───────────────┤
|
|
93
|
+
│ Component │ 30%
|
|
94
|
+
│ Tests │ UI 级别
|
|
95
|
+
├───────────────┤
|
|
96
|
+
│ Unit Tests │ 40%
|
|
97
|
+
│ (Jest) │ 纯逻辑
|
|
98
|
+
└───────────────┘
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 为什么是这个比例(Why This Distribution)
|
|
102
|
+
|
|
103
|
+
| 层级 | 原因 |
|
|
104
|
+
|------|------|
|
|
105
|
+
| **E2E 10%** | 慢且不稳定,但能抓集成问题 |
|
|
106
|
+
| **Integration 20%** | 不跑完整 App 也能测关键流程 |
|
|
107
|
+
| **Component 30%** | UI 变化反馈快 |
|
|
108
|
+
| **Unit 40%** | 最快且最稳定,覆盖逻辑 |
|
|
109
|
+
|
|
110
|
+
> 🔴 **如果 90% 是单测而 0% E2E,你测错了重点。**
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 3. 每个层级测什么(What to Test at Each Level)
|
|
115
|
+
|
|
116
|
+
### 单元测试(Unit Tests, Jest)
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
✅ 测:
|
|
120
|
+
├── 工具函数(formatDate、calculatePrice)
|
|
121
|
+
├── 状态 reducer(Redux/Zustand)
|
|
122
|
+
├── API 响应转换
|
|
123
|
+
├── 校验逻辑
|
|
124
|
+
└── 业务规则
|
|
125
|
+
|
|
126
|
+
❌ 不测:
|
|
127
|
+
├── 组件渲染(去组件测试)
|
|
128
|
+
├── 导航(去集成测试)
|
|
129
|
+
├── 原生模块(mock)
|
|
130
|
+
└── 第三方库
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 组件测试(RNTL / flutter_test)
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
✅ 测:
|
|
137
|
+
├── 组件正确渲染
|
|
138
|
+
├── 用户交互(tap、type、swipe)
|
|
139
|
+
├── loading/error/empty 状态
|
|
140
|
+
├── 无障碍 label 是否存在
|
|
141
|
+
└── props 改变行为
|
|
142
|
+
|
|
143
|
+
❌ 不测:
|
|
144
|
+
├── 内部实现细节
|
|
145
|
+
├── 全量 snapshot(只对关键组件)
|
|
146
|
+
├── 过细样式细节(脆弱)
|
|
147
|
+
└── 第三方组件内部
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 集成测试(Integration Tests)
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
✅ 测:
|
|
154
|
+
├── 表单提交流程
|
|
155
|
+
├── 页面间导航
|
|
156
|
+
├── 跨页面状态保持
|
|
157
|
+
├── API 集成(配合 mock server)
|
|
158
|
+
└── Context/provider 交互
|
|
159
|
+
|
|
160
|
+
❌ 不测:
|
|
161
|
+
├── 每条路径都测(太慢)
|
|
162
|
+
├── 第三方服务(mock)
|
|
163
|
+
└── 后端逻辑(后端测试)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### E2E 测试(End-to-End)
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
✅ 测:
|
|
170
|
+
├── 关键用户路径(登录、购买、注册)
|
|
171
|
+
├── 离线 → 在线切换
|
|
172
|
+
├── Deep link 处理
|
|
173
|
+
├── 推送通知跳转
|
|
174
|
+
├── 权限流程
|
|
175
|
+
└── 支付流程
|
|
176
|
+
|
|
177
|
+
❌ 不测:
|
|
178
|
+
├── 所有边界(太慢)
|
|
179
|
+
├── 视觉回归(用 snapshot)
|
|
180
|
+
├── 非关键功能
|
|
181
|
+
└── 纯后端逻辑
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 4. 平台特定测试(Platform-Specific Testing)
|
|
187
|
+
|
|
188
|
+
### iOS 与 Android 的差异
|
|
189
|
+
|
|
190
|
+
| 区域 | iOS 行为 | Android 行为 | 两端都测? |
|
|
191
|
+
|------|----------|--------------|------------|
|
|
192
|
+
| **返回导航** | 边缘滑动 | 系统返回键 | ✅ YES |
|
|
193
|
+
| **权限** | 仅一次,需设置开启 | 每次询问,带 rationale | ✅ YES |
|
|
194
|
+
| **键盘** | 外观与行为不同 | 外观与行为不同 | ✅ YES |
|
|
195
|
+
| **日期选择器** | 轮盘/Modal | Material dialog | ⚠️ 自定义 UI 时 |
|
|
196
|
+
| **推送格式** | APNs payload | FCM payload | ✅ YES |
|
|
197
|
+
| **Deep links** | Universal Links | App Links | ✅ YES |
|
|
198
|
+
| **手势** | 部分特有 | Material 手势 | ⚠️ 自定义交互时 |
|
|
199
|
+
|
|
200
|
+
### 平台测试策略(Platform Testing Strategy)
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
每个平台:
|
|
204
|
+
├── 跑单测(同一套)
|
|
205
|
+
├── 跑组件测试(同一套)
|
|
206
|
+
├── 真机 E2E
|
|
207
|
+
│ ├── iOS:真机(不只模拟器)
|
|
208
|
+
│ └── Android:中端机(不只旗舰)
|
|
209
|
+
└── 平台特有功能单独验证
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 5. 离线与网络测试(Offline & Network Testing)
|
|
215
|
+
|
|
216
|
+
### 需要覆盖的离线场景(Offline Scenarios)
|
|
217
|
+
|
|
218
|
+
| 场景 | 要验证的行为 |
|
|
219
|
+
|------|--------------|
|
|
220
|
+
| 启动即离线 | 展示缓存或离线提示 |
|
|
221
|
+
| 操作中断网 | 操作入队不丢失 |
|
|
222
|
+
| 恢复联网 | 队列同步无重复 |
|
|
223
|
+
| 慢网(2G) | loading/超时逻辑正常 |
|
|
224
|
+
| 波动网络 | 重试与错误恢复 |
|
|
225
|
+
|
|
226
|
+
### 如何测试网络条件(How to Test Network Conditions)
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
方法:
|
|
230
|
+
├── 单元测试:mock NetInfo,测逻辑
|
|
231
|
+
├── 集成测试:mock API 响应,测 UI
|
|
232
|
+
├── E2E(Detox):device.setURLBlacklist()
|
|
233
|
+
├── E2E(Maestro):设置 network conditions
|
|
234
|
+
└── 手动:Charles Proxy / Network Link Conditioner
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 6. 性能测试(Performance Testing)
|
|
240
|
+
|
|
241
|
+
### 测什么(What to Measure)
|
|
242
|
+
|
|
243
|
+
| 指标 | 目标 | 测量方式 |
|
|
244
|
+
|------|------|----------|
|
|
245
|
+
| **App 启动** | < 2 秒 | Profiler / Flashlight |
|
|
246
|
+
| **页面切换** | < 300ms | React DevTools |
|
|
247
|
+
| **列表滚动** | 60 FPS | Profiler / 体感 |
|
|
248
|
+
| **内存** | 稳定无泄漏 | Instruments / Android Profiler |
|
|
249
|
+
| **包体积** | 尽量小 | Metro bundler 分析 |
|
|
250
|
+
|
|
251
|
+
### 何时做性能测试(When to Performance Test)
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
必须测试:
|
|
255
|
+
├── 发布前(必做)
|
|
256
|
+
├── 大功能上线后
|
|
257
|
+
├── 依赖升级后
|
|
258
|
+
├── 用户反馈变慢时
|
|
259
|
+
└── CI(可选基准)
|
|
260
|
+
|
|
261
|
+
测试地点:
|
|
262
|
+
├── 真机(必须)
|
|
263
|
+
├── 低端机(如 Galaxy A / 旧 iPhone)
|
|
264
|
+
├── 不在模拟器(性能不可信)
|
|
265
|
+
└── 用真实数据(不是 3 条)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 7. 无障碍测试(Accessibility Testing)
|
|
271
|
+
|
|
272
|
+
### 需要验证的内容(What to Verify)
|
|
273
|
+
|
|
274
|
+
| 元素 | 检查点 |
|
|
275
|
+
|------|--------|
|
|
276
|
+
| 交互元素 | 有 accessibilityLabel |
|
|
277
|
+
| 图片 | 有 alt 或标记装饰性 |
|
|
278
|
+
| 表单 | label 与输入关联 |
|
|
279
|
+
| 按钮 | role = button |
|
|
280
|
+
| 触控目标 | iOS ≥ 44x44 / Android ≥ 48x48 |
|
|
281
|
+
| 对比度 | WCAG AA 最低 |
|
|
282
|
+
|
|
283
|
+
### 如何测试(How to Test)
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
自动化:
|
|
287
|
+
├── React Native:jest-axe
|
|
288
|
+
├── Flutter:测试中的 Accessibility checker
|
|
289
|
+
└── Lint 规则补充缺失 label
|
|
290
|
+
|
|
291
|
+
手动:
|
|
292
|
+
├── 开启 VoiceOver(iOS)/ TalkBack(Android)
|
|
293
|
+
├── 全流程用读屏操作
|
|
294
|
+
├── 增大字体测试
|
|
295
|
+
└── 减少动态(reduced motion)测试
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 8. CI/CD 集成(CI/CD Integration)
|
|
301
|
+
|
|
302
|
+
### 运行策略(What to Run Where)
|
|
303
|
+
|
|
304
|
+
| 阶段 | 测试 | 设备 |
|
|
305
|
+
|------|------|------|
|
|
306
|
+
| **PR** | Unit + Component | 无(速度优先) |
|
|
307
|
+
| **Merge to main** | + Integration | 模拟器/模拟机 |
|
|
308
|
+
| **Pre-release** | + E2E | 真机(设备农场) |
|
|
309
|
+
| **Nightly** | 全量 | 设备农场 |
|
|
310
|
+
|
|
311
|
+
### 设备农场选择(Device Farm Options)
|
|
312
|
+
|
|
313
|
+
| 服务 | 优势 | 缺点 |
|
|
314
|
+
|------|------|------|
|
|
315
|
+
| **Firebase Test Lab** | 免费额度、Google 设备 | 偏 Android |
|
|
316
|
+
| **AWS Device Farm** | 机型广 | 费用高 |
|
|
317
|
+
| **BrowserStack** | 体验好 | 费用高 |
|
|
318
|
+
| **本地设备** | 免费、可靠 | 覆盖有限 |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 📝 移动端测试清单(MOBILE TESTING CHECKLIST)
|
|
323
|
+
|
|
324
|
+
### PR 前
|
|
325
|
+
- [ ] 新逻辑有单测
|
|
326
|
+
- [ ] 新 UI 有组件测试
|
|
327
|
+
- [ ] 测试里无 console.log
|
|
328
|
+
- [ ] CI 测试通过
|
|
329
|
+
|
|
330
|
+
### 发布前
|
|
331
|
+
- [ ] iOS 真机 E2E
|
|
332
|
+
- [ ] Android 真机 E2E
|
|
333
|
+
- [ ] 低端机测试
|
|
334
|
+
- [ ] 离线场景验证
|
|
335
|
+
- [ ] 性能可接受
|
|
336
|
+
- [ ] 无障碍验证
|
|
337
|
+
|
|
338
|
+
### 有意识跳过(What to Skip, Consciously)
|
|
339
|
+
- [ ] 不追求 100% 覆盖(关注有效覆盖)
|
|
340
|
+
- [ ] 不测每个视觉排列(snapshot 适量)
|
|
341
|
+
- [ ] 不测第三方库内部
|
|
342
|
+
- [ ] 不测后端逻辑(另行测试)
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## 🎯 测试前必问(Testing Questions to Ask)
|
|
347
|
+
|
|
348
|
+
在写测试前先回答:
|
|
349
|
+
|
|
350
|
+
1. **什么最可能出错?** → 测它
|
|
351
|
+
2. **用户最在意什么?** → E2E 测它
|
|
352
|
+
3. **哪里逻辑复杂?** → 单测覆盖
|
|
353
|
+
4. **哪些平台差异大?** → 双端测试
|
|
354
|
+
5. **离线会发生什么?** → 覆盖该场景
|
|
355
|
+
|
|
356
|
+
> **记住(Remember)**:好的移动端测试,是测“对的东西”,不是测“所有东西”。不稳定的 E2E 比不测更糟糕;能抓 bug 的单测,价值远高于 100 个无意义通过的测试。
|