@musashishao/agent-kit 1.0.0
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 +487 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/search.py +76 -0
- package/.agent/ARCHITECTURE.md +225 -0
- package/.agent/CONTEXT.md +229 -0
- package/.agent/FEATURE_ROADMAP.md +435 -0
- package/.agent/PROMPT_TEMPLATES.md +261 -0
- package/.agent/agents/backend-specialist.md +263 -0
- package/.agent/agents/database-architect.md +226 -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 +556 -0
- package/.agent/agents/game-developer.md +162 -0
- package/.agent/agents/mobile-developer.md +377 -0
- package/.agent/agents/orchestrator.md +416 -0
- package/.agent/agents/penetration-tester.md +188 -0
- package/.agent/agents/performance-optimizer.md +187 -0
- package/.agent/agents/project-planner.md +403 -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/rules/GEMINI.md +251 -0
- package/.agent/skills/api-patterns/SKILL.md +81 -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 +71 -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 +82 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/.agent/skills/architecture/SKILL.md +55 -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 +199 -0
- package/.agent/skills/behavioral-modes/SKILL.md +242 -0
- package/.agent/skills/brainstorming/SKILL.md +163 -0
- package/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
- package/.agent/skills/clean-code/SKILL.md +201 -0
- package/.agent/skills/code-review-checklist/SKILL.md +109 -0
- package/.agent/skills/database-design/SKILL.md +52 -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 +48 -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/docker-expert/SKILL.md +409 -0
- package/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/.agent/skills/frontend-design/SKILL.md +396 -0
- package/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/.agent/skills/frontend-design/color-system.md +311 -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 +722 -0
- package/.agent/skills/frontend-design/typography-system.md +345 -0
- package/.agent/skills/frontend-design/ux-psychology.md +541 -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 +156 -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/lint-and-validate/SKILL.md +45 -0
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +172 -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 +357 -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 +433 -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/nestjs-expert/SKILL.md +552 -0
- package/.agent/skills/nextjs-best-practices/SKILL.md +203 -0
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/.agent/skills/parallel-agents/SKILL.md +175 -0
- package/.agent/skills/performance-profiling/SKILL.md +143 -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 +167 -0
- package/.agent/skills/prisma-expert/SKILL.md +355 -0
- package/.agent/skills/python-patterns/SKILL.md +441 -0
- package/.agent/skills/react-patterns/SKILL.md +198 -0
- package/.agent/skills/red-team-tactics/SKILL.md +199 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +129 -0
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/.agent/skills/server-management/SKILL.md +161 -0
- package/.agent/skills/systematic-debugging/SKILL.md +109 -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/typescript-expert/SKILL.md +429 -0
- package/.agent/skills/typescript-expert/references/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
- package/.agent/skills/typescript-expert/references/utility-types.ts +335 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
- package/.agent/skills/ui-ux-pro-max/SKILL.md +351 -0
- package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agent/skills/ui-ux-pro-max/scripts/core.py +257 -0
- package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +487 -0
- package/.agent/skills/ui-ux-pro-max/scripts/search.py +76 -0
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/.agent/skills/vulnerability-scanner/checklists.md +121 -0
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -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 +237 -0
- package/.agent/workflows/plan.md +89 -0
- package/.agent/workflows/preview.md +80 -0
- package/.agent/workflows/status.md +86 -0
- package/.agent/workflows/test.md +144 -0
- package/.agent/workflows/ui-ux-pro-max.md +231 -0
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/bin/cli.js +235 -0
- package/index.js +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
# Mobile Testing Patterns
|
|
2
|
+
|
|
3
|
+
> **Mobile testing is NOT web testing. Different constraints, different strategies.**
|
|
4
|
+
> This file teaches WHEN to use each testing approach and WHY.
|
|
5
|
+
> **Code examples are minimal - focus on decision-making.**
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🧠 MOBILE TESTING MINDSET
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Mobile testing differs from web:
|
|
13
|
+
├── Real devices matter (emulators hide bugs)
|
|
14
|
+
├── Platform differences (iOS vs Android behavior)
|
|
15
|
+
├── Network conditions vary wildly
|
|
16
|
+
├── Battery/performance under test
|
|
17
|
+
├── App lifecycle (background, killed, restored)
|
|
18
|
+
├── Permissions and system dialogs
|
|
19
|
+
└── Touch interactions vs clicks
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🚫 AI MOBILE TESTING ANTI-PATTERNS
|
|
25
|
+
|
|
26
|
+
| ❌ AI Default | Why It's Wrong | ✅ Mobile-Correct |
|
|
27
|
+
|---------------|----------------|-------------------|
|
|
28
|
+
| Jest-only testing | Misses native layer | Jest + E2E on device |
|
|
29
|
+
| Enzyme patterns | Deprecated, web-focused | React Native Testing Library |
|
|
30
|
+
| Browser-based E2E (Cypress) | Can't test native features | Detox / Maestro |
|
|
31
|
+
| Mock everything | Misses integration bugs | Real device testing |
|
|
32
|
+
| Ignore platform tests | iOS/Android differ | Platform-specific cases |
|
|
33
|
+
| Skip performance tests | Mobile perf is critical | Profile on low-end device |
|
|
34
|
+
| Test only happy path | Mobile has more edge cases | Offline, permissions, interrupts |
|
|
35
|
+
| 100% unit test coverage | False security | Pyramid balance |
|
|
36
|
+
| Copy web testing patterns | Different environment | Mobile-specific tools |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 1. Testing Tool Selection
|
|
41
|
+
|
|
42
|
+
### Decision Tree
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
WHAT ARE YOU TESTING?
|
|
46
|
+
│
|
|
47
|
+
├── Pure functions, utilities, helpers
|
|
48
|
+
│ └── Jest (unit tests)
|
|
49
|
+
│ └── No special mobile setup needed
|
|
50
|
+
│
|
|
51
|
+
├── Individual components (isolated)
|
|
52
|
+
│ ├── React Native → React Native Testing Library
|
|
53
|
+
│ └── Flutter → flutter_test (widget tests)
|
|
54
|
+
│
|
|
55
|
+
├── Components with hooks, context, navigation
|
|
56
|
+
│ ├── React Native → RNTL + mocked providers
|
|
57
|
+
│ └── Flutter → integration_test package
|
|
58
|
+
│
|
|
59
|
+
├── Full user flows (login, checkout, etc.)
|
|
60
|
+
│ ├── Detox (React Native, fast, reliable)
|
|
61
|
+
│ ├── Maestro (Cross-platform, YAML-based)
|
|
62
|
+
│ └── Appium (Legacy, slow, last resort)
|
|
63
|
+
│
|
|
64
|
+
└── Performance, memory, battery
|
|
65
|
+
├── Flashlight (RN performance)
|
|
66
|
+
├── Flutter DevTools
|
|
67
|
+
└── Real device profiling (Xcode/Android Studio)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Tool Comparison
|
|
71
|
+
|
|
72
|
+
| Tool | Platform | Speed | Reliability | Use When |
|
|
73
|
+
|------|----------|-------|-------------|----------|
|
|
74
|
+
| **Jest** | RN | ⚡⚡⚡ | ⚡⚡⚡ | Unit tests, logic |
|
|
75
|
+
| **RNTL** | RN | ⚡⚡⚡ | ⚡⚡ | Component tests |
|
|
76
|
+
| **flutter_test** | Flutter | ⚡⚡⚡ | ⚡⚡⚡ | Widget tests |
|
|
77
|
+
| **Detox** | RN | ⚡⚡ | ⚡⚡⚡ | E2E, critical flows |
|
|
78
|
+
| **Maestro** | Both | ⚡⚡ | ⚡⚡ | E2E, cross-platform |
|
|
79
|
+
| **Appium** | Both | ⚡ | ⚡ | Legacy, last resort |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 2. Testing Pyramid for Mobile
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
┌───────────────┐
|
|
87
|
+
│ E2E Tests │ 10%
|
|
88
|
+
│ (Real device) │ Slow, expensive, essential
|
|
89
|
+
├───────────────┤
|
|
90
|
+
│ Integration │ 20%
|
|
91
|
+
│ Tests │ Component + context
|
|
92
|
+
├───────────────┤
|
|
93
|
+
│ Component │ 30%
|
|
94
|
+
│ Tests │ Isolated UI
|
|
95
|
+
├───────────────┤
|
|
96
|
+
│ Unit Tests │ 40%
|
|
97
|
+
│ (Jest) │ Pure logic
|
|
98
|
+
└───────────────┘
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Why This Distribution?
|
|
102
|
+
|
|
103
|
+
| Level | Why This % |
|
|
104
|
+
|-------|------------|
|
|
105
|
+
| **E2E 10%** | Slow, flaky, but catches integration bugs |
|
|
106
|
+
| **Integration 20%** | Tests real user flows without full app |
|
|
107
|
+
| **Component 30%** | Fast feedback on UI changes |
|
|
108
|
+
| **Unit 40%** | Fastest, most stable, logic coverage |
|
|
109
|
+
|
|
110
|
+
> 🔴 **If you have 90% unit tests and 0% E2E, you're testing the wrong things.**
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 3. What to Test at Each Level
|
|
115
|
+
|
|
116
|
+
### Unit Tests (Jest)
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
✅ TEST:
|
|
120
|
+
├── Utility functions (formatDate, calculatePrice)
|
|
121
|
+
├── State reducers (Redux, Zustand stores)
|
|
122
|
+
├── API response transformers
|
|
123
|
+
├── Validation logic
|
|
124
|
+
└── Business rules
|
|
125
|
+
|
|
126
|
+
❌ DON'T TEST:
|
|
127
|
+
├── Component rendering (use component tests)
|
|
128
|
+
├── Navigation (use integration tests)
|
|
129
|
+
├── Native modules (mock them)
|
|
130
|
+
└── Third-party libraries
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Component Tests (RNTL / flutter_test)
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
✅ TEST:
|
|
137
|
+
├── Component renders correctly
|
|
138
|
+
├── User interactions (tap, type, swipe)
|
|
139
|
+
├── Loading/error/empty states
|
|
140
|
+
├── Accessibility labels exist
|
|
141
|
+
└── Props change behavior
|
|
142
|
+
|
|
143
|
+
❌ DON'T TEST:
|
|
144
|
+
├── Internal implementation details
|
|
145
|
+
├── Snapshot everything (only key components)
|
|
146
|
+
├── Styling specifics (brittle)
|
|
147
|
+
└── Third-party component internals
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Integration Tests
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
✅ TEST:
|
|
154
|
+
├── Form submission flows
|
|
155
|
+
├── Navigation between screens
|
|
156
|
+
├── State persistence across screens
|
|
157
|
+
├── API integration (with mocked server)
|
|
158
|
+
└── Context/provider interactions
|
|
159
|
+
|
|
160
|
+
❌ DON'T TEST:
|
|
161
|
+
├── Every possible path (use unit tests)
|
|
162
|
+
├── Third-party services (mock them)
|
|
163
|
+
└── Backend logic (backend tests)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### E2E Tests
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
✅ TEST:
|
|
170
|
+
├── Critical user journeys (login, purchase, signup)
|
|
171
|
+
├── Offline → online transitions
|
|
172
|
+
├── Deep link handling
|
|
173
|
+
├── Push notification navigation
|
|
174
|
+
├── Permission flows
|
|
175
|
+
└── Payment flows
|
|
176
|
+
|
|
177
|
+
❌ DON'T TEST:
|
|
178
|
+
├── Every edge case (too slow)
|
|
179
|
+
├── Visual regression (use snapshot tests)
|
|
180
|
+
├── Non-critical features
|
|
181
|
+
└── Backend-only logic
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 4. Platform-Specific Testing
|
|
187
|
+
|
|
188
|
+
### What Differs Between iOS and Android?
|
|
189
|
+
|
|
190
|
+
| Area | iOS Behavior | Android Behavior | Test Both? |
|
|
191
|
+
|------|--------------|------------------|------------|
|
|
192
|
+
| **Back navigation** | Edge swipe | System back button | ✅ YES |
|
|
193
|
+
| **Permissions** | Ask once, settings | Ask each time, rationale | ✅ YES |
|
|
194
|
+
| **Keyboard** | Different appearance | Different behavior | ✅ YES |
|
|
195
|
+
| **Date picker** | Wheel/modal | Material dialog | ⚠️ If custom UI |
|
|
196
|
+
| **Push format** | APNs payload | FCM payload | ✅ YES |
|
|
197
|
+
| **Deep links** | Universal Links | App Links | ✅ YES |
|
|
198
|
+
| **Gestures** | Some unique | Material gestures | ⚠️ If custom |
|
|
199
|
+
|
|
200
|
+
### Platform Testing Strategy
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
FOR EACH PLATFORM:
|
|
204
|
+
├── Run unit tests (same on both)
|
|
205
|
+
├── Run component tests (same on both)
|
|
206
|
+
├── Run E2E on REAL DEVICE
|
|
207
|
+
│ ├── iOS: iPhone (not just simulator)
|
|
208
|
+
│ └── Android: Mid-range device (not flagship)
|
|
209
|
+
└── Test platform-specific features separately
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 5. Offline & Network Testing
|
|
215
|
+
|
|
216
|
+
### Offline Scenarios to Test
|
|
217
|
+
|
|
218
|
+
| Scenario | What to Verify |
|
|
219
|
+
|----------|----------------|
|
|
220
|
+
| Start app offline | Shows cached data or offline message |
|
|
221
|
+
| Go offline mid-action | Action queued, not lost |
|
|
222
|
+
| Come back online | Queue synced, no duplicates |
|
|
223
|
+
| Slow network (2G) | Loading states, timeouts work |
|
|
224
|
+
| Flaky network | Retry logic, error recovery |
|
|
225
|
+
|
|
226
|
+
### How to Test Network Conditions
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
APPROACH:
|
|
230
|
+
├── Unit tests: Mock NetInfo, test logic
|
|
231
|
+
├── Integration: Mock API responses, test UI
|
|
232
|
+
├── E2E (Detox): Use device.setURLBlacklist()
|
|
233
|
+
├── E2E (Maestro): Use network conditions
|
|
234
|
+
└── Manual: Use Charles Proxy / Network Link Conditioner
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 6. Performance Testing
|
|
240
|
+
|
|
241
|
+
### What to Measure
|
|
242
|
+
|
|
243
|
+
| Metric | Target | How to Measure |
|
|
244
|
+
|--------|--------|----------------|
|
|
245
|
+
| **App startup** | < 2 seconds | Profiler, Flashlight |
|
|
246
|
+
| **Screen transition** | < 300ms | React DevTools |
|
|
247
|
+
| **List scroll** | 60 FPS | Profiler, feel |
|
|
248
|
+
| **Memory** | Stable, no leaks | Instruments / Android Profiler |
|
|
249
|
+
| **Bundle size** | Minimize | Metro bundler analysis |
|
|
250
|
+
|
|
251
|
+
### When to Performance Test
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
PERFORMANCE TEST:
|
|
255
|
+
├── Before release (required)
|
|
256
|
+
├── After adding heavy features
|
|
257
|
+
├── After upgrading dependencies
|
|
258
|
+
├── When users report slowness
|
|
259
|
+
└── On CI (optional, automated benchmarks)
|
|
260
|
+
|
|
261
|
+
WHERE TO TEST:
|
|
262
|
+
├── Real device (REQUIRED)
|
|
263
|
+
├── Low-end device (Galaxy A series, old iPhone)
|
|
264
|
+
├── NOT on emulator (lies about performance)
|
|
265
|
+
└── With production-like data (not 3 items)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 7. Accessibility Testing
|
|
271
|
+
|
|
272
|
+
### What to Verify
|
|
273
|
+
|
|
274
|
+
| Element | Check |
|
|
275
|
+
|---------|-------|
|
|
276
|
+
| Interactive elements | Have accessibilityLabel |
|
|
277
|
+
| Images | Have alt text or decorative flag |
|
|
278
|
+
| Forms | Labels linked to inputs |
|
|
279
|
+
| Buttons | Role = button |
|
|
280
|
+
| Touch targets | ≥ 44x44 (iOS) / 48x48 (Android) |
|
|
281
|
+
| Color contrast | WCAG AA minimum |
|
|
282
|
+
|
|
283
|
+
### How to Test
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
AUTOMATED:
|
|
287
|
+
├── React Native: jest-axe
|
|
288
|
+
├── Flutter: Accessibility checker in tests
|
|
289
|
+
└── Lint rules for missing labels
|
|
290
|
+
|
|
291
|
+
MANUAL:
|
|
292
|
+
├── Enable VoiceOver (iOS) / TalkBack (Android)
|
|
293
|
+
├── Navigate entire app with screen reader
|
|
294
|
+
├── Test with increased text size
|
|
295
|
+
└── Test with reduced motion
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 8. CI/CD Integration
|
|
301
|
+
|
|
302
|
+
### What to Run Where
|
|
303
|
+
|
|
304
|
+
| Stage | Tests | Devices |
|
|
305
|
+
|-------|-------|---------|
|
|
306
|
+
| **PR** | Unit + Component | None (fast) |
|
|
307
|
+
| **Merge to main** | + Integration | Simulator/Emulator |
|
|
308
|
+
| **Pre-release** | + E2E | Real devices (farm) |
|
|
309
|
+
| **Nightly** | Full suite | Device farm |
|
|
310
|
+
|
|
311
|
+
### Device Farm Options
|
|
312
|
+
|
|
313
|
+
| Service | Pros | Cons |
|
|
314
|
+
|---------|------|------|
|
|
315
|
+
| **Firebase Test Lab** | Free tier, Google devices | Android focus |
|
|
316
|
+
| **AWS Device Farm** | Wide selection | Expensive |
|
|
317
|
+
| **BrowserStack** | Good UX | Expensive |
|
|
318
|
+
| **Local devices** | Free, reliable | Limited variety |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 📝 MOBILE TESTING CHECKLIST
|
|
323
|
+
|
|
324
|
+
### Before PR
|
|
325
|
+
- [ ] Unit tests for new logic
|
|
326
|
+
- [ ] Component tests for new UI
|
|
327
|
+
- [ ] No console.logs in tests
|
|
328
|
+
- [ ] Tests pass on CI
|
|
329
|
+
|
|
330
|
+
### Before Release
|
|
331
|
+
- [ ] E2E on real iOS device
|
|
332
|
+
- [ ] E2E on real Android device
|
|
333
|
+
- [ ] Tested on low-end device
|
|
334
|
+
- [ ] Offline scenarios verified
|
|
335
|
+
- [ ] Performance acceptable
|
|
336
|
+
- [ ] Accessibility verified
|
|
337
|
+
|
|
338
|
+
### What to Skip (Consciously)
|
|
339
|
+
- [ ] 100% coverage (aim for meaningful coverage)
|
|
340
|
+
- [ ] Every visual permutation (use snapshots sparingly)
|
|
341
|
+
- [ ] Third-party library internals
|
|
342
|
+
- [ ] Backend logic (separate tests)
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## 🎯 Testing Questions to Ask
|
|
347
|
+
|
|
348
|
+
Before writing tests, answer:
|
|
349
|
+
|
|
350
|
+
1. **What could break?** → Test that
|
|
351
|
+
2. **What's critical for users?** → E2E test that
|
|
352
|
+
3. **What's complex logic?** → Unit test that
|
|
353
|
+
4. **What's platform-specific?** → Test on both platforms
|
|
354
|
+
5. **What happens offline?** → Test that scenario
|
|
355
|
+
|
|
356
|
+
> **Remember:** Good mobile testing is about testing the RIGHT things, not EVERYTHING. A flaky E2E test is worse than no test. A failing unit test that catches a bug is worth 100 passing trivial tests.
|