Compartilhados
Utilitários de teste compartilhados e independentes de framework, que podem ser usados tanto nos testes do Vitest quanto do Playwright.
Documentação completa: Arquitetura de Testes
Objetivo
Seção intitulada “Objetivo”Evitar conflitos entre frameworks de teste mantendo fixtures e factories sem dependências externas de teste (Vitest, Playwright, MSW, etc).
Estrutura
Seção intitulada “Estrutura”test-shared/├── fixtures/ # Dados fixos para testes│ ├── ids.ts # IDs de teste consistentes│ ├── tokens.ts # Geração de tokens mock│ └── users.ts # Usuários pré-configurados├── factories/ # Criadores de objetos de teste│ └── user.ts # Factory de usuários└── index.ts # Exportações centralizadasEm testes do Playwright (E2E)
Seção intitulada “Em testes do Playwright (E2E)”import { TOKENS, createUser, TEST_IDS } from "../../test-shared";
test("should authenticate", async ({ page }) => { await page.route("**/api/login", async (route) => { await route.fulfill({ body: JSON.stringify({ access_token: TOKENS.valid(), refresh_token: TOKENS.refresh(), }), }); });});Em testes do Vitest (Unit/Integration)
Seção intitulada “Em testes do Vitest (Unit/Integration)”import { TOKENS, createUser } from "../../test-shared";
describe("Auth Service", () => { it("should parse token", () => { const token = TOKENS.valid(); expect(parseToken(token)).toBeDefined(); });});Disponível
Seção intitulada “Disponível”Fixtures
Seção intitulada “Fixtures”-
TOKENS: Gerador de tokens JWT mockTOKENS.valid()- Token válido por 1hTOKENS.expired()- Token expiradoTOKENS.refresh()- Refresh tokenTOKENS.impersonate.valid()- Token de impersonação
-
TEST_IDS: IDs consistentes para testesTEST_IDS.users.default- ID do usuário padrãoTEST_IDS.accounts.default- ID da conta padrão
-
TEST_USERS: Usuários pré-configuradosTEST_USERS.default- Usuário padrãoTEST_USERS.admin- Usuário admin
Factories
Seção intitulada “Factories”createUser(overrides?): Cria usuário com valores padrãoconst user = createUser({ name: "Custom Name" });
🚫 O que NÃO colocar aqui
Seção intitulada “🚫 O que NÃO colocar aqui”- ❌ Setups do MSW (vai em
test-utils/) - ❌ Configurações do Vitest (vai em
vitest.config.ts) - ❌ Page Objects do Playwright (vai em
e2e/pages/) - ❌ Dependências externas pesadas (faker, etc)
✅ O que colocar aqui
Seção intitulada “✅ O que colocar aqui”- ✅ Fixtures simples e estáticas
- ✅ Factories sem dependências externas
- ✅ Constantes de teste
- ✅ Geradores de dados mock simples
- ✅ Tipos compartilhados para testes
Diferença entre test-shared/ e test-utils/
Seção intitulada “Diferença entre test-shared/ e test-utils/”| Aspecto | test-shared/ | test-utils/ |
|---|---|---|
| Framework | Agnóstico | Específico Vitest |
| Dependências | Nenhuma | MSW, Vitest, etc |
| Uso | Vitest + Playwright | Apenas Vitest |
| Conteúdo | Fixtures, Factories | Handlers MSW, Setup |
| Importável por | Qualquer teste | Só testes Vitest |
Boas Práticas
Seção intitulada “Boas Práticas”- Mantenha simples: Sem lógica complexa ou dependências externas
- Seja consistente: Use sempre os mesmos IDs/valores nos testes
- Documente: Adicione JSDoc explicando o propósito de cada fixture
- Exporte tudo: Use
index.tspara exportações centralizadas - Evite estado: Factories devem ser funções puras quando possível