Testing uses Vitest with React Testing Library for unit and integration tests, Playwright for E2E, and MSW (Mock Service Worker) for API mocking. All tests follow the AAA pattern (Arrange → Act → Assert), grouped in describe() blocks named after the component or function, with test names written as it('should [action] when [condition]'). Every test must cover the happy path, error/edge case, and loading state for async behaviour. External API calls are always mocked — no real network requests in tests. Queries use screen.getByRole() over getByTestId to stay accessible and behaviour-focused rather than testing implementation details. Test files are co-located next to their source: Button.tsx alongside Button.test.tsx in the same folder.