Claude
|
7d21e5c074
|
test(mobile): add comprehensive test infrastructure and initial test suite
Implemented complete testing setup with Jest and React Native Testing Library:
## Test Infrastructure
**Files Created:**
1. `mobile/jest.config.js` - Jest configuration with:
- jest-expo preset for React Native/Expo
- Module name mapping for @pezkuwi/* (shared library)
- Transform ignore patterns for node_modules
- Coverage thresholds: 70% statements, 60% branches, 70% functions/lines
- Test match pattern: **/__tests__/**/*.test.(ts|tsx|js)
2. `mobile/jest.setup.js` - Test setup with mocks:
- expo-linear-gradient mock
- expo-secure-store mock (async storage operations)
- expo-local-authentication mock (biometric auth)
- @react-native-async-storage/async-storage mock
- @polkadot/api mock (blockchain API)
- Supabase mock (auth and database)
- Console warning/error suppression in tests
3. `mobile/package.json` - Added test scripts:
- `npm test` - Run all tests
- `npm run test:watch` - Watch mode for development
- `npm run test:coverage` - Generate coverage report
---
## Test Suites
### 1. Context Tests
**File:** `mobile/src/contexts/__tests__/AuthContext.test.tsx`
Tests for AuthContext (7 test cases):
- ✅ Provides auth context with initial state
- ✅ Signs in with email/password
- ✅ Handles sign in errors correctly
- ✅ Signs up new user with profile creation
- ✅ Signs out user
- ✅ Checks admin status
- ✅ Proper async handling and state updates
**Coverage Areas:**
- Context initialization
- Sign in/sign up flows
- Error handling
- Supabase integration
- State management
---
### 2. Component Tests
**File:** `mobile/src/components/__tests__/ErrorBoundary.test.tsx`
Tests for ErrorBoundary (5 test cases):
- ✅ Renders children when no error occurs
- ✅ Renders error UI when child throws error
- ✅ Displays "Try Again" button on error
- ✅ Renders custom fallback if provided
- ✅ Calls onError callback when error occurs
**Coverage Areas:**
- Error catching mechanism
- Fallback UI rendering
- Custom error handlers
- Component recovery
---
### 3. Integration Tests
**File:** `mobile/__tests__/App.test.tsx`
Integration tests for App component (3 test cases):
- ✅ Renders App component successfully
- ✅ Shows loading indicator during i18n initialization
- ✅ Wraps app in ErrorBoundary (provider hierarchy)
**Coverage Areas:**
- App initialization
- Provider hierarchy validation
- Loading states
- Error boundary integration
---
## Test Statistics
**Total Test Files:** 3
**Total Test Cases:** 15
**Coverage Targets:** 70% (enforced by Jest config)
### Test Distribution:
- Context Tests: 7 cases (AuthContext)
- Component Tests: 5 cases (ErrorBoundary)
- Integration Tests: 3 cases (App)
---
## Mocked Dependencies
All external dependencies properly mocked for reliable testing:
- ✅ Expo modules (LinearGradient, SecureStore, LocalAuth)
- ✅ AsyncStorage
- ✅ Polkadot.js API
- ✅ Supabase client
- ✅ React Native components
- ✅ i18n initialization
---
## Running Tests
```bash
# Run all tests
npm test
# Watch mode (for development)
npm run test:watch
# Coverage report
npm run test:coverage
```
---
## Future Test Additions
Recommended areas for additional test coverage:
- [ ] PolkadotContext tests (wallet connection, blockchain queries)
- [ ] Screen component tests (SignIn, SignUp, Governance, etc.)
- [ ] Blockchain transaction tests (mocked pallet calls)
- [ ] Navigation tests
- [ ] E2E tests with Detox
---
## Notes
- All tests use React Native Testing Library best practices
- Async operations properly handled with waitFor()
- Mocks configured for deterministic test results
- Coverage thresholds enforced at 70%
- Tests run in isolation with proper cleanup
|
2025-11-22 04:29:23 +00:00 |
|