feat: écran de fin de partie + tests unitaires client et E2E Playwright
- Fix: UIScene n'était jamais lancée (active: false, jamais scene.launch)
donc l'event 'game-over' du serveur n'était jamais affiché — la partie
semblait ne pas avoir de fin. Remplacé par un panneau Vue dans GameView
(vainqueur, classement trié, bouton Quitter via vue-router). UIScene.js
supprimée (code mort).
- Extraction de client/src/utils/hudUtils.js (constantes ATTRS/couleurs et
gaugePercent) depuis GameView.vue pour les rendre testables isolément.
- Tests unitaires client (Vitest) : store Pinia (game.js) et hudUtils
(24 tests, client/test/unit/).
- Tests d'intégration E2E (Playwright, e2e/) avec de vrais clients
Socket.io et rendu Phaser réel dans Chromium :
* game-flow.spec.js : lobby → démarrage → main de 4 cartes → résolution
* item-shop.spec.js : boutique, bouton désactivé si jauge insuffisante,
achat retire l'objet pour tous + effet appliqué + affiché sur la table
* game-over.spec.js : partie complète (12 tours) → panneau de fin
webServer démarre automatiquement client+serveur ; ajout d'une route
GET /health côté Express pour permettre à Playwright de détecter un
serveur déjà démarré.
- README : documentation des 3 niveaux de tests (unitaires serveur,
unitaires client, intégration E2E) et de la nouvelle arborescence.
This commit is contained in:
1 parent
6a1c800253
commit
11cba0467b
20 files changed
+3447
-100
No files matched your search
@@ -13,15 +13,20 @@ Jeu de cartes en ligne multijoueur (2-4 joueurs). Collecte des points en jouant
|
||||
```
|
||||
regnum/
|
||||
├── client/ # Vue 3 + Phaser 3
|
||||
│ └── src/
|
||||
│ ├── views/ # HomeView, LobbyView, GameView
|
||||
│ ├── game/ # Scènes Phaser (Boot, Game, UI) + objets
|
||||
│ ├── stores/ # Pinia store
|
||||
│ └── services/# Socket.io client
|
||||
└── server/ # Node.js
|
||||
└── src/
|
||||
├── game/ # Room, RoomManager, cards
|
||||
└── index.js # Serveur Express + Socket.io
|
||||
│ ├── src/
|
||||
│ │ ├── views/ # HomeView, LobbyView, GameView
|
||||
│ │ ├── game/ # Scènes Phaser (Boot, Game) + objets + items
|
||||
│ │ ├── stores/ # Pinia store
|
||||
│ │ ├── services/# Socket.io client
|
||||
│ │ └── utils/ # Fonctions pures partagées (HUD, etc.)
|
||||
│ └── test/unit/ # Tests unitaires Vitest (store, utils)
|
||||
├── server/ # Node.js
|
||||
│ ├── src/
|
||||
│ │ ├── game/ # Room, RoomManager, cards, items
|
||||
│ │ └── index.js # Serveur Express + Socket.io
|
||||
│ └── test/game/ # Tests unitaires node:test (moteur de jeu)
|
||||
└── e2e/ # Tests d'intégration Playwright (client+serveur réels)
|
||||
└── tests/
|
||||
```
|
||||
|
||||
## Lancement
|
||||
@@ -44,12 +49,38 @@ Ouvrir `http://localhost:5173`
|
||||
|
||||
## Tests
|
||||
|
||||
Tests unitaires du moteur de jeu (serveur), avec le test runner natif de Node.js :
|
||||
Le projet a 3 niveaux de tests, à exécuter indépendamment :
|
||||
|
||||
### 1. Tests unitaires — serveur (moteur de jeu)
|
||||
|
||||
Logique pure de `Room.js` / `cards.js` / `items.js` (règles, gains, achats, effets permanents), avec le test runner natif de Node.js :
|
||||
|
||||
```bash
|
||||
cd server
|
||||
npm test # exécution unique
|
||||
npm run test:watch # mode watch
|
||||
npm test # exécution unique
|
||||
npm run test:watch # mode watch
|
||||
```
|
||||
|
||||
### 2. Tests unitaires — client (store, utilitaires)
|
||||
|
||||
Store Pinia et fonctions pures du HUD (`hudUtils.js`), avec Vitest :
|
||||
|
||||
```bash
|
||||
cd client
|
||||
npm run test:unit # exécution unique
|
||||
npm run test:unit:watch # mode watch
|
||||
```
|
||||
|
||||
### 3. Tests d'intégration E2E (client + serveur réels)
|
||||
|
||||
Parcours complets (créer/rejoindre une salle, jouer des tours, acheter un objet, fin de partie) pilotés dans un vrai navigateur Chromium via Playwright, avec de vrais clients Socket.io. `webServer` dans `e2e/playwright.config.js` démarre automatiquement le serveur et le client si besoin.
|
||||
|
||||
```bash
|
||||
cd e2e
|
||||
npm install # première fois seulement
|
||||
npx playwright install chromium # première fois seulement, si besoin
|
||||
npm test # exécution unique
|
||||
npm run test:ui # mode interactif (debug)
|
||||
```
|
||||
|
||||
## Règles
|
||||
|
||||
Reference in new issue
Block a user