2026-02-12 19:35:22 +01:00
|
|
|
# Guida ai Test
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Obiettivo della guida:
|
|
|
|
|
- capire che tipi di test esistono nel progetto
|
|
|
|
|
- capire a cosa servono davvero
|
|
|
|
|
- sapere come lanciarli senza errori
|
|
|
|
|
- sapere come leggere i risultati
|
|
|
|
|
- sapere cosa fare quando qualcosa fallisce
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 0) Perche facciamo i test?
|
|
|
|
|
|
|
|
|
|
Un test è un controllo automatico.
|
|
|
|
|
|
|
|
|
|
In pratica:
|
|
|
|
|
- tu cambi il codice
|
|
|
|
|
- lanci i test
|
|
|
|
|
- i test ti dicono se hai rotto qualcosa
|
|
|
|
|
|
|
|
|
|
Se i test sono verdi, hai una buona probabilita che il progetto sia ancora stabile.
|
|
|
|
|
Se i test sono rossi, c'e un problema da capire e sistemare.
|
|
|
|
|
|
|
|
|
|
## 1) Struttura delle cartelle test
|
2026-02-12 15:13:04 +01:00
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
tests/
|
2026-02-12 19:35:22 +01:00
|
|
|
├── unit/ # Test della logica pura (molto veloci)
|
|
|
|
|
├── integration/ # Test di moduli che comunicano tra loro
|
|
|
|
|
├── component/ # Test dei componenti Vue in isolamento
|
|
|
|
|
├── stress/ # Test sotto carico (molti client/azioni)
|
|
|
|
|
├── e2e/ # Test end-to-end su browser reale
|
|
|
|
|
└── README.md # Questa guida
|
2026-02-12 15:13:04 +01:00
|
|
|
```
|
|
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 2) Tecnologie usate
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
- `Vitest`: per `unit`, `integration`, `component`, `stress`
|
|
|
|
|
- `Playwright`: per `e2e`
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Tradotto in modo semplice:
|
|
|
|
|
- Vitest controlla parti interne del progetto
|
|
|
|
|
- Playwright controlla il comportamento reale dell'app nel browser
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 3) Prerequisiti (prima di tutto)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
### 3.1 Installa dipendenze
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Dalla root del progetto:
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
```bash
|
|
|
|
|
npm install
|
|
|
|
|
```
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
### 3.2 Installa browser Playwright (solo E2E)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
```bash
|
|
|
|
|
npx playwright install chromium firefox
|
|
|
|
|
```
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Se non fai questo passo, gli E2E possono fallire subito con errore tipo:
|
|
|
|
|
- `Executable doesn't exist`
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 4) Comandi principali
|
2026-02-12 15:13:04 +01:00
|
|
|
|
|
|
|
|
```bash
|
2026-02-12 19:35:22 +01:00
|
|
|
npm run test # Vitest in watch mode (resta in ascolto)
|
|
|
|
|
npm run test:all # Tutta la suite Vitest una volta
|
|
|
|
|
npm run test:unit # Unit + integration
|
|
|
|
|
npm run test:component # Solo component test
|
|
|
|
|
npm run test:stress # Solo stress test
|
|
|
|
|
npm run test:e2e # Tutti gli E2E Playwright
|
|
|
|
|
npm run test:e2e:ui # Playwright con interfaccia grafica
|
2026-02-12 15:13:04 +01:00
|
|
|
```
|
|
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Ordine consigliato (quando vuoi verificare tutto):
|
|
|
|
|
1. `npm run test:all`
|
|
|
|
|
2. `npm run test:e2e`
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 5) Cosa testa ogni suite (spiegato semplice)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
### 5.1 Unit (`tests/unit`)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Cosa sono:
|
|
|
|
|
- test piccoli e veloci sulla logica del gioco
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
A cosa servono:
|
|
|
|
|
- trovano subito bug in regole punteggio/set/reset
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Esempi reali nel progetto:
|
|
|
|
|
- incremento/decremento punti
|
|
|
|
|
- cambio palla
|
|
|
|
|
- vittoria set con regola dei 2 punti di scarto
|
|
|
|
|
- reset stato
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Quando falliscono:
|
|
|
|
|
- quasi sempre c'e un problema nella logica core
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
### 5.2 Integration (`tests/integration`)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Cosa sono:
|
|
|
|
|
- test su pezzi che lavorano insieme (es. WebSocket + handler)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
A cosa servono:
|
|
|
|
|
- verificano che i messaggi si muovano nel modo corretto
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Esempi reali nel progetto:
|
|
|
|
|
- registrazione client `display`/`controller`
|
|
|
|
|
- broadcast stato ai client
|
|
|
|
|
- validazione input malformati
|
|
|
|
|
- autorizzazioni (solo controller puo inviare certe azioni)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Quando falliscono:
|
|
|
|
|
- spesso c'e problema nel protocollo messaggi o nei controlli di ruolo
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
### 5.3 Component (`tests/component`)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Cosa sono:
|
|
|
|
|
- test dei componenti Vue senza browser completo
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
A cosa servono:
|
|
|
|
|
- controllano rendering e comportamento UI locale
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Esempi reali nel progetto:
|
|
|
|
|
- punteggio mostrato correttamente
|
|
|
|
|
- stato connessione
|
|
|
|
|
- click bottoni controller
|
|
|
|
|
- dialog reset/config/cambi
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Quando falliscono:
|
|
|
|
|
- spesso hai rotto template, computed, metodi o binding
|
|
|
|
|
|
|
|
|
|
### 5.4 Stress (`tests/stress`)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Cosa sono:
|
|
|
|
|
- test per simulare carico elevato
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
A cosa servono:
|
|
|
|
|
- verificano che il sistema regga molti client e molte azioni rapide
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Esempi reali nel progetto:
|
|
|
|
|
- tanti client display connessi insieme
|
|
|
|
|
- burst di azioni consecutive
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Quando falliscono:
|
|
|
|
|
- possono emergere problemi di performance o consistenza stato
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
### 5.5 End-to-End (`tests/e2e`)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Cosa sono:
|
|
|
|
|
- test realistici nel browser
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
A cosa servono:
|
|
|
|
|
- verificano che Controller e Display funzionino davvero insieme
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
File principali:
|
|
|
|
|
- `basic-flow.spec.cjs`: flusso base Controller <-> Display
|
|
|
|
|
- `game-operations.spec.cjs`: reset, config, toggle, cambi
|
|
|
|
|
- `game-simulation.spec.cjs`: simulazione partita
|
|
|
|
|
- `full-match.spec.cjs`: scenari partita completi
|
|
|
|
|
- `accessibility.spec.cjs`: controlli accessibilita con axe
|
|
|
|
|
- `visual-regression.spec.cjs`: confronto screenshot con baseline
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Nota importante:
|
|
|
|
|
- gli E2E sono configurati in seriale (`workers: 1`) per evitare interferenze sullo stato partita condiviso.
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 6) Come leggere i risultati
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
### 6.1 Risultati Vitest
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Caso OK (verde):
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
Test Files 6 passed (6)
|
|
|
|
|
Tests 159 passed (159)
|
|
|
|
|
```
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Significa:
|
|
|
|
|
- tutti i test Vitest sono passati
|
|
|
|
|
|
|
|
|
|
Caso KO (rosso):
|
|
|
|
|
- guarda prima il nome del file test
|
|
|
|
|
- poi il nome del test (`describe/test`)
|
|
|
|
|
- poi la riga con `expected` e `received`
|
|
|
|
|
- infine vai alla riga indicata nello stack trace
|
|
|
|
|
|
|
|
|
|
### 6.2 Risultati Playwright
|
|
|
|
|
|
|
|
|
|
Caso OK:
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
72 passed
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Caso KO:
|
|
|
|
|
- apri il report HTML
|
2026-02-12 15:13:04 +01:00
|
|
|
|
|
|
|
|
```bash
|
2026-02-12 19:35:22 +01:00
|
|
|
npx playwright show-report
|
2026-02-12 15:13:04 +01:00
|
|
|
```
|
|
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Nel report puoi vedere:
|
|
|
|
|
- step del test
|
|
|
|
|
- errori precisi
|
|
|
|
|
- screenshot/diff
|
|
|
|
|
- trace
|
|
|
|
|
|
|
|
|
|
## 7) Visual Regression (screenshot)
|
|
|
|
|
|
|
|
|
|
I test visual confrontano immagini attuali con immagini baseline.
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Cartella baseline:
|
|
|
|
|
- `tests/e2e/visual-regression.spec.cjs-snapshots/`
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Se cambia la UI in modo intenzionale:
|
|
|
|
|
- aggiorna snapshot
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
```bash
|
|
|
|
|
npm run test:e2e -- --update-snapshots
|
2026-02-12 15:13:04 +01:00
|
|
|
```
|
2026-02-12 19:35:22 +01:00
|
|
|
|
|
|
|
|
Poi rilancia controllo:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
npm run test:e2e
|
2026-02-12 15:13:04 +01:00
|
|
|
```
|
|
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Se la UI non doveva cambiare:
|
|
|
|
|
- non aggiornare snapshot
|
|
|
|
|
- correggi prima il codice UI/CSS
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 8) Errori comuni e soluzione veloce
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
- Errore Playwright `Executable doesn't exist`:
|
|
|
|
|
- esegui `npx playwright install chromium firefox`
|
|
|
|
|
|
|
|
|
|
- E2E instabili con punteggi strani:
|
|
|
|
|
- assicurati che i test restino seriali (`workers: 1`)
|
|
|
|
|
- assicurati che ogni test parta da stato pulito (reset)
|
|
|
|
|
|
|
|
|
|
- Selettore ambiguo (esempio bottone `Cambi`):
|
|
|
|
|
- usa selector piu specifici, ad esempio `getByRole(..., { exact: true })`
|
|
|
|
|
|
|
|
|
|
- Failure accessibilita:
|
|
|
|
|
- controlla prima `alt` delle immagini e contrasto colori
|
|
|
|
|
|
|
|
|
|
## 9) Mini checklist prima di fare push
|
|
|
|
|
|
|
|
|
|
Esegui:
|
2026-02-12 15:13:04 +01:00
|
|
|
|
|
|
|
|
```bash
|
2026-02-12 19:35:22 +01:00
|
|
|
npm run test:all
|
|
|
|
|
npm run test:e2e
|
2026-02-12 15:13:04 +01:00
|
|
|
```
|
|
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Se hai cambiato UI e i visual falliscono per differenze volute:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
npm run test:e2e -- --update-snapshots
|
|
|
|
|
npm run test:e2e
|
|
|
|
|
```
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
## 10) Come aggiungere un nuovo test (consigli pratici)
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
- metti i test nel posto giusto:
|
|
|
|
|
- `tests/unit` per logica pura
|
|
|
|
|
- `tests/integration` per moduli che dialogano
|
|
|
|
|
- `tests/component` per Vue in isolamento
|
|
|
|
|
- `tests/stress` per carico
|
|
|
|
|
- `tests/e2e` per flussi reali
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
- mantieni nomi chiari:
|
|
|
|
|
- il titolo del test deve spiegare cosa verifica
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
- evita test dipendenti da ordine:
|
|
|
|
|
- ogni test deve potersi eseguire da solo
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
- negli E2E:
|
|
|
|
|
- porta sempre il sistema in stato iniziale
|
|
|
|
|
- usa selector robusti
|
|
|
|
|
- limita `waitForTimeout` e preferisci attese su condizioni reali
|
2026-02-12 15:13:04 +01:00
|
|
|
|
2026-02-12 19:35:22 +01:00
|
|
|
Se segui questi punti, i test restano stabili e facili da capire anche per chi entra ora nel progetto.
|