docs(auto-melhoria): memorias atualizadas 2026-05-20 — suite 80/80
- MEMORY.md: revisada com 6 novas lições (inclui vitest.jsdom.mocks) - SESSION-STATE.md: sync com project SESSION-STATE.md - memory/2026-05-20.md: sessao criada (22:56 → 00:18) - .learnings/LEARNINGS.md: LRN-006, LRN-007 adicionados - .learnings/PATTERN_COUNTER.md: react.testing-library + vitest.jsdom.mocks = 3 - AGENTS.md: Test & Mocking Best Practices promovido de PATTERN_COUNTER
This commit is contained in:
@@ -325,6 +325,39 @@ Quando o usuário pedir para analisar sistemas Linux, logs, processos ou rede:
|
||||
|
||||
---
|
||||
|
||||
## ✅ Test & Mocking Best Practices (promovido 2026-05-20)
|
||||
|
||||
Estes padrões atingiram Count ≥ 3 no PATTERN_COUNTER — promovidos para regra permanente.
|
||||
|
||||
### Vitest + jsdom — Mocks globais (vitest.jsdom.mocks)
|
||||
> `localStorage`, `clipboard`, `matchMedia` NÃO funcionam no jsdom sem setup.
|
||||
|
||||
```ts
|
||||
// ❌ Erro comum: dependência em impl nativa do jsdom
|
||||
localStorage.setItem('x', '1') // Erro no jsdom puro
|
||||
|
||||
// ✅ Sempre mockar em beforeAll / beforeEach globais
|
||||
beforeAll(() => {
|
||||
vi.stubGlobal('localStorage', {
|
||||
getItem: vi.fn(),
|
||||
setItem: vi.fn(),
|
||||
removeItem: vi.fn(),
|
||||
clear: vi.fn(),
|
||||
});
|
||||
Object.assign(navigator, { clipboard: { writeText: vi.fn() } });
|
||||
window.matchMedia = vi.fn().mockReturnValue({ matches: false, addListener: vi.fn(), removeListener: vi.fn() });
|
||||
});
|
||||
```
|
||||
|
||||
### React Testing Library (react.testing-library)
|
||||
> Use `screen` e queries semânticas — evita queries por implementação.
|
||||
|
||||
- ✅ `screen.getByRole('button', { name: /submit/i })`
|
||||
- ❌ `getByTestId('submit-btn')` (quebra com mudanças de markup)
|
||||
- ✅ `userEvent.setup()` preferencial a `fireEvent`
|
||||
- ✅ Wrapper com `<BrowserRouter>` + `<UserProvider>` em todos os testes de componentes que usam contextos
|
||||
---
|
||||
|
||||
## 🗺️ Estratégia de Stack — Agente Full-Stack
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user