front(test): Vitest + premier spec (ErrorService)
- Vitest (cohérent avec le back) pour les tests de logique/services purs ; vitest-setup charge @angular/compiler (fallback JIT requis pour importer les symboles @angular/* partiellement compilés) - error.service.spec.ts : 6 cas couvrant toMessage() - script test -> vitest run (+ test:watch). Tests de composants TestBed = plugin Angular dédié, hors périmètre pour l'instant. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,8 @@
|
||||
"start": "ng serve",
|
||||
"build": "ng build",
|
||||
"build:prod": "ng build --configuration production",
|
||||
"test": "ng test --watch=false --browsers=ChromeHeadless",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
"lint": "eslint .",
|
||||
"lint:fix": "eslint . --fix"
|
||||
},
|
||||
@@ -33,8 +34,10 @@
|
||||
"@types/node": "^22.0.0",
|
||||
"angular-eslint": "^19.8.1",
|
||||
"eslint": "^9.39.4",
|
||||
"jsdom": "^29.1.1",
|
||||
"sass": "^1.83.0",
|
||||
"typescript": "~5.8.3",
|
||||
"typescript-eslint": "^8.62.0"
|
||||
"typescript-eslint": "^8.62.0",
|
||||
"vitest": "^3.2.4"
|
||||
}
|
||||
}
|
||||
|
||||
36
front-public/src/app/core/error.service.spec.ts
Normal file
36
front-public/src/app/core/error.service.spec.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { HttpErrorResponse } from '@angular/common/http';
|
||||
import { ErrorService } from './error.service';
|
||||
|
||||
describe('ErrorService.toMessage', () => {
|
||||
const svc = new ErrorService();
|
||||
|
||||
it('retourne un body string', () => {
|
||||
const err = new HttpErrorResponse({ error: 'Boom', status: 500 });
|
||||
expect(svc.toMessage(err)).toBe('Boom');
|
||||
});
|
||||
|
||||
it('extrait body.message', () => {
|
||||
const err = new HttpErrorResponse({ error: { message: 'Champ invalide' }, status: 400 });
|
||||
expect(svc.toMessage(err)).toBe('Champ invalide');
|
||||
});
|
||||
|
||||
it('joint un body.message tableau', () => {
|
||||
const err = new HttpErrorResponse({ error: { message: ['a', 'b'] }, status: 400 });
|
||||
expect(svc.toMessage(err)).toBe('a, b');
|
||||
});
|
||||
|
||||
it('status 0 -> serveur injoignable', () => {
|
||||
const err = new HttpErrorResponse({ status: 0 });
|
||||
expect(svc.toMessage(err)).toContain('injoignable');
|
||||
});
|
||||
|
||||
it('Error standard -> son message', () => {
|
||||
expect(svc.toMessage(new Error('oops'))).toBe('oops');
|
||||
});
|
||||
|
||||
it('valeur inconnue -> fallback', () => {
|
||||
expect(svc.toMessage(null)).toBe('Une erreur est survenue.');
|
||||
expect(svc.toMessage(undefined, 'custom')).toBe('custom');
|
||||
});
|
||||
});
|
||||
3
front-public/vitest-setup.ts
Normal file
3
front-public/vitest-setup.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
// Charge le compilateur Angular pour permettre le fallback JIT en test
|
||||
// (sinon l'import de symboles @angular/* partiellement compilés échoue).
|
||||
import '@angular/compiler';
|
||||
13
front-public/vitest.config.ts
Normal file
13
front-public/vitest.config.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { defineConfig } from 'vitest/config';
|
||||
|
||||
// Vitest pour les tests de logique/services purs (cohérent avec le back).
|
||||
// Les tests de composants avec TestBed nécessiteraient un plugin Angular dédié
|
||||
// (ex. @analogjs/vitest-angular) — hors périmètre pour l'instant.
|
||||
export default defineConfig({
|
||||
test: {
|
||||
globals: true,
|
||||
environment: 'node',
|
||||
setupFiles: ['./vitest-setup.ts'],
|
||||
include: ['src/**/*.spec.ts'],
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user