Aller au contenu principal

Tests

Chaque projet a ses propres suites de tests. Les tests de l'interface n'ont jamais besoin d'une API en marche : ils utilisent une API simulée.

API​

À lancer depuis host-panel-api :

CommandeCe qu'elle lance
make testTests unitaires (go test ./...)
make test-integrationTests d'intégration (build tag integration) : chaque moteur de services sur ses vraies images, et l'exec Docker. Nécessite Docker, dure quelques minutes (délai maximal 20 min)
make vet / make fmtAnalyse statique / formatage

Ajoutez un test d'intégration sur les vraies images pour chaque nouveau moteur de services.

Interface​

À lancer depuis host-panel-interface :

CommandeCe qu'elle lance
yarn typecheckVérification des types de l'application et des tests
yarn lintESLint
yarn i18n:checkMêmes clés, variables et balises dans toutes les langues
yarn testTests unitaires et de composants (Vitest, jsdom). yarn test:watch en mode surveillance
yarn test:e2eTests de bout en bout (Playwright, Chromium)

Avant une merge request, lancez :

yarn lint && yarn i18n:check && yarn build

Vitest​

  • Les tests sont à côté du code : src/**/*.test.ts(x).
  • MSW sert l'API simulée (tests/setup/msw.ts).
  • renderWithProviders (tests/setup/render.tsx) monte un composant avec React Query et un routeur.

Playwright​

  • Les tests sont dans tests/e2e/*.spec.ts.
  • L'application est compilée avec VITE_API_URL=http://api.test dans dist-e2e/ et servie par vite preview sur le port 4180.
  • page.route() répond à chaque requête vers http://api.test (tests/e2e/fixtures.ts). Le WebSocket est accepté sans serveur. Les requêtes vers toute autre origine sont refusées.
  • Premier lancement : npx playwright install chromium.
  • En cas d'échec, la trace est dans test-results/ : npx playwright show-trace <zip>.

L'API simulée​

Les deux suites partagent une même simulation de l'API en mémoire : tests/mocks/api.ts, avec des données typées dans tests/mocks/fixtures.ts.

Un test échoue si l'interface appelle une route que la simulation ne sert pas. Quand vous ajoutez un appel à l'API dans l'interface, ajoutez la route dans tests/mocks/api.ts, ou surchargez-la dans le test :

test("shows the API error", async ({ page, api }) => {
api.on("POST", "/services/resources", {
status: 409,
body: { code: "RESOURCE_EXISTS" },
});
api.state.me = restrictedUser; // change the mocked state
// ...
expect(api.calls("POST", "/services/resources")[0].body).toEqual({ ... });
});
OutilUsage
api.stateModifier les données simulées pour un test
api.on(method, path, response)Surcharger une route
api.calls(method, path)Inspecter les requêtes envoyées par l'interface

CLI​

À lancer depuis host-panel-cli :

CommandeCe qu'elle lance
make testgo test ./...
make lintgo vet et golangci-lint

Intégration continue​

ProjetJobs
APIgo test ./...
Interfaceyarn lint, yarn typecheck, yarn i18n:check, yarn test, yarn build ; puis yarn test:e2e

Bon à savoir​

  • Les images des tests d'intégration viennent de mirror.gcr.io, comme toutes les autres.
  • Playwright relance une fois un test en échec en CI, jamais en local.