| 03-interaction-quality-and-completeness |
00 |
testing |
| vitest |
| react-testing-library |
| typescript |
| react |
|
|
| BudgetSetup.test.tsx with smoke test and 2 it.skip stubs (IXTN-01) |
| CategoriesPage.test.tsx with smoke test and 4 it.skip stubs (IXTN-05, STATE-02) |
| DashboardPage.test.tsx with smoke test and 2 it.skip stubs (STATE-01, STATE-03) |
| BillsTracker.test.tsx with smoke test and 3 it.skip stubs (STATE-03, IXTN-03) |
|
| 03-01 (spinner/disable tests for BudgetSetup, CategoriesPage) |
| 03-02 (empty state tests for DashboardPage, CategoriesPage) |
| 03-03 (skeleton/flash tests for BillsTracker) |
|
| added |
patterns |
|
|
| vi.mock('@/hooks/useBudgets') pattern for mocking hooks to control loading state in page tests |
| BudgetDetail minimal fixture pattern for component tests needing complex props |
| MemoryRouter wrapper for page-level components that use react-router-dom |
|
|
| created |
modified |
| frontend/src/components/BudgetSetup.test.tsx |
| frontend/src/pages/CategoriesPage.test.tsx |
| frontend/src/pages/DashboardPage.test.tsx |
| frontend/src/components/BillsTracker.test.tsx |
|
|
|
| Mock useBudgets hook in DashboardPage tests rather than mocking the API to control loading state directly |
| BillsTracker renders a full Card component — wrap with div, not <tr>, in tests |
| DashboardPage already has an empty state component; smoke test asserts budget.create button presence instead of combobox |
|
| Smoke test pattern: render with minimal props, assert one visible element to confirm no crash |
| Hook mock pattern: vi.mock('@/hooks/useName', () => ({ useName: () => ({ ...returnValues }) })) |
| i18n key passthrough: t: (key: string) => key gives predictable assertions like getByText('budget.create') |
|
| IXTN-01 |
| IXTN-05 |
| STATE-01 |
| STATE-02 |
| STATE-03 |
|
5min |
2026-03-11 |