72 lines
1.2 KiB
Markdown
72 lines
1.2 KiB
Markdown
# CRUD Testing Summary (React Native + Jest + Supabase)
|
|
|
|
## What these tests are about
|
|
Tests verify **app behavior**, not Supabase itself.
|
|
|
|
They check:
|
|
- User interaction works
|
|
- Correct database functions are called
|
|
- Navigation happens after actions
|
|
|
|
---
|
|
|
|
## CRUD Breakdown
|
|
|
|
### CREATE
|
|
- User inputs data
|
|
- `insert()` is called
|
|
- App navigates back
|
|
|
|
Flow:
|
|
User → type → press create → insert() → router.back()
|
|
|
|
---
|
|
|
|
### READ
|
|
- Data is fetched (`select().eq().single()`)
|
|
- State updates
|
|
- UI renders correct content
|
|
|
|
---
|
|
|
|
### UPDATE
|
|
- Existing data is loaded
|
|
- User edits input
|
|
- `update().eq()` is called with correct values
|
|
- Navigation happens
|
|
|
|
---
|
|
|
|
### DELETE
|
|
- User presses delete
|
|
- `Alert.alert()` is triggered
|
|
- Confirm button (`onPress`) is manually called in test
|
|
- `delete().eq()` runs
|
|
- Navigation happens
|
|
|
|
---
|
|
|
|
## Why mocking is used
|
|
- No real database calls
|
|
- Faster tests
|
|
- Full control over success/error cases
|
|
- No side effects (no real data created/deleted)
|
|
|
|
---
|
|
|
|
## Mock rule
|
|
The mock must match the real call chain:
|
|
|
|
Real:
|
|
from → update → eq → select → single
|
|
|
|
Mock:
|
|
from() → update() → eq() → select() → single()
|
|
|
|
If not → errors like:
|
|
".select is not a function"
|
|
|
|
---
|
|
|
|
https://oss.callstack.com/react-native-testing-library/
|